这似乎是一种搜索圣杯,但我正在寻找一个JavaScript单元测试环境的设置。要求是:
除了无头嘲讽之外的一切似乎都是直截了当的。
到目前为止,我已经对JS-Test-Driver,Karma和Phantomjs进行了测试,对于模拟,我使用了Squire和Isolate - 以及the answer here中代码的实现,似乎没有什么工作正常。我一次又一次地遇到的主要问题是测试框架在所有测试运行之前返回 - 主要是因为模拟需要它们自己的require()
依赖项。
任何帮助(或脚手架)都会有所帮助!
[编辑]
我在Github上建立了一个基本的工作Karma project,其中包含一些示例模拟测试,使用chai-expect作为匹配库。我将尝试添加更多有用的文档,但如果您熟悉Karma,则扩展应该非常简单。只需git clone
然后npm install
即可让它运行。
答案 0 :(得分:5)
通常每个测试框架都允许您进行异步测试并手动启动测试,这应该是您所需要的。
对于QUnit,您需要将autostart
设置为false
以手动启用踢踢测试:
QUnit.config.autostart = false;
require(['test/qunit/test.js'], function() {
QUnit.start();
});
如果您在测试期间异步加载内容,只需使用QUnits stop()
和start()
方法:
test('something that loads asynchronously', function() {
stop();
define(['something'], function(sth) {
ok(sth, 'Something loaded');
start();
});
});
Mocha非常相似:
/*globals mocha */
mocha.setup('bdd');
require([ 'test/mocha/test.js' ], function() {
mocha.run();
});
异步测试通过声明一个参数来更好,它将成为您规范的回调:
describe('an async something', function() {
it('loads the dependency', function(done) {
define(['something'], function(sth) {
ok(sth, 'Something loaded');
done();
});
});
});
这应该通常有用。有一点要记住,如果使用RequireJS加载测试文件,测试可能并不总是以相同的顺序运行。