我在github上有一个(JavaScript)存储库,我想为它设置一个测试工具。
似乎' tape '和' testling '应该做我想要的(带有漂亮github徽章的最小轻量级解决方案),除非有人有替代解决方案,但我正在努力如何设置东西。
我从来没有使用过node.js,似乎磁带和测试(以及所有相关的例子)都集中在node.js上。
谁能建议一个简单的客户端JavaScript库测试工具的最小配置?我猜(?)我需要nodejs, npm, package。在本地运行tape/testling,但我不清楚如何将我的(非节点)JavaScript合并到测试工具中。
我现在看到的是:
myobj.js:
var MyObj = {};
MyObj.a = function() { return 'a'; }
MyObj.b = function() { return 'b'; }
myobj-sub.js:
MyObj.Sub = {};
MyObj.Sub.x = function() { return 'x'; }
MyObj.Sub.y = function() { return 'y'; }
这些当然是通过
拉入HTML的<script src="myobj.js"></script>
<script src="myobj-sub.js"></script>
对于测试线束,我想我需要这样的东西:
var test = require('tape');
test('myobj', function(assert) {
assert.equal('a', MyObj.a(), 'test a');
assert.equal('x', MyObj.Sub.x(), 'test x');
assert.end();
});
但我不知道该在哪里填补空白!
(ps:我在Linux上运行,如果它有任何区别的话)。
Thx .
你的问题没有太多的空白。你需要做的:
- Install Node.js(这也将安装
npm
命令行工具)。这里的方法是特定于发行版的,在基于debian的Linux发行版上你会这样做:<>之前安装nodejs - 设置项目的目录结构:<>之前myproject的/| - package.json| - myobj.js| - myobj-sub.js| - - - - - -测试/| - myobj.js之前您可以在
package.json
中指定许多不同的参数,但唯一重要的部分是devDependencies
,以确保安装测试线束:<>之前{"名称":"myproj","版本":"1.0.0","description": "只是一些测试项目"," devDependencies ": {"tape": "~2.13.3"},"脚本":{"test": "node test/*.js"}} - 安装依赖关系。现在它们在
package.json
中被指定,这只是从项目目录运行的问题:<>之前npm安装之前这将下载所有依赖项并将它们放置到项目目录中的node_modules
子目录中。 - 运行测试:<>之前NPM运行脚本测试
就是这样,测试开始了。唯一的问题是,他们失败,因为你的脚本文件不使用CommonJS格式。下面是myobj.js
的样子:
exports.a = function() { return 'a'; }
exports.b = function() { return 'b'; }
这里是myobj-sub.js
:
exports.x = function() { return 'x'; }
exports.y = function() { return 'y'; }
最后test/myobj.js
:
var test = require('tape');
var MyObj = require('../myobj');
MyObj.Sub = require('../myobj-sub');
test('myobj', function(assert) {
assert.equal('a', MyObj.a(), 'test a');
assert.equal('x', MyObj.Sub.x(), 'test x');
assert.end();
});
如果你现在重新运行测试,它们会成功。
如果你想从网页中使用你的CommonJS模块怎么办?您可以使用browserify。安装browserify:
sudo npm install -g browserify
并运行它生成一个bundle:
browserify myobj.js myobj-sub.js -o bundle.js
bundle.js
现在是一个脚本文件,可以包含在一个网页-然后网页将能够做var MyObj = require('myobj');
就像测试一样。
感谢@ wladdimir和一点实验,我发现我可以安排事情,以便我可以用标准函数表达式构建我的代码,以这种方式它将在浏览器中正常运行,也将在node.js中运行。
我只需要设置模块。导出到已定义对象,对于MyObj。Sub到'require' MyObj,(都屏蔽为仅在CommonJs/node.js中可见),如下:
myobj.js:
var MyObj = {};
MyObj.a = function() { return 'a'; }
MyObj.b = function() { return 'b'; }
if (typeof module!='undefined' && module.exports) module.exports = MyObj;
myobj-sub.js:
if (typeof module!='undefined' && module.exports) var MyObj = require('./myobj.js');
MyObj.Sub = {};
MyObj.Sub.x = function() { return 'x'; }
MyObj.Sub.y = function() { return 'y'; }
if (typeof module!='undefined' && module.exports) module.exports = MyObj.Sub;
(注意'。/'似乎对需求很重要)。
这些JavaScript文件可以用