我在github上有一个(JavaScript)存储库,我想为它设置一个测试工具。
似乎'磁带'和'测试'应该做我想要的(最小的轻量级解决方案与漂亮的github徽章),除非有人有其他解决方案,但我正在努力设置如何。
我从未使用过node.js,似乎磁带和testling(以及所有相关示例)都集中在node.js上。
任何人都可以建议一个简单的客户端JavaScript库测试工具的最小配置吗?我想(?)我需要nodejs,npm,package.json等在本地运行磁带/测试,但我不清楚如何将我的(非节点)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。
答案 0 :(得分:3)
您的问题中没有太多空白。你需要做什么:
npm
命令行工具)。这里的方法是特定于发行版的,在基于Debian的Linux发行版上你会做:
sudo apt-get install nodejs
myproject/ |- package.json |- myobj.js |- myobj-sub.js |- test/ |- myobj.js您可以在
package.json
中指定lots of different parameters,但唯一重要的部分是devDependencies
,以确保安装了测试工具:
{ "name": "myproj", "version": "1.0.0", "description": "Just some test project", "devDependencies": { "tape" : "~2.13.3" }, "scripts": { "test": "node test/*.js" } }
package.json
中指定,这只是从项目目录运行的问题:
npm install这将下载所有依赖项并将它们放入项目目录中的
node_modules
子目录中。npm run-script test
就是这样,测试正在运行。唯一的问题是它们失败了,因为您的脚本文件不使用CommonJS format。以下是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
然后运行它来生成一个包:
browserify myobj.js myobj-sub.js -o bundle.js
bundle.js
现在是一个可以包含在网页中的脚本文件 - 然后网页就可以像测试一样进行var MyObj = require('myobj');
。
答案 1 :(得分:2)
感谢@wladimir和一些实验,我发现我可以安排一些事情,以便我可以使用标准函数表达式构建我的代码,这样它将在浏览器中正常运行,并且也将在节点中运行。 JS。
我只需要将module.exports设置为已定义的对象,并将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;
(注意'./'似乎对要求很重要。)
然后可以使用&lt; script&gt;将这些JavaScript文件拖入HTML中。元素正常。
测试工具需要使用'require'包含原始脚本:
var test = require('tape');
var MyObj = require('../myobj.js');
MyObj.Sub = require('../myobj-sub.js');
test('myobj', function(assert) {
assert.equal(MyObj.a(), 'a', 'test a');
assert.equal(MyObj.Sub.x(), 'x', 'test x');
assert.end();
});
我与btoa()/ atob()有点挣扎,但这是另一个故事。