我们一直在成功地将 Jasmine 和 RequireJS 一起用于单元测试,现在正在寻找添加代码覆盖率,为此我一直在研究Blanket.js。我知道它名义上支持 Jasmine 和 RequireJS,并且我能够成功使用 GitHub 上的“jasmine-requirejs”运行器,但是这个运行器使用的方法与我们的模型略有不同——即,它使用加载测试规范runner.html 中的脚本标签,而我们的方法是通过 RequireJS 加载规范,如下所示(这是我们运行器中 requirejs 调用的回调):
var jasmineEnv = jasmine.getEnv();
jasmineEnv.updateInterval = 1000;
var htmlReporter = new jasmine.TrivialReporter();
var jUnitReporter = new jasmine.JUnitXmlReporter('../JasmineTests/');
jasmineEnv.addReporter(htmlReporter);
jasmineEnv.addReporter(jUnitReporter);
jasmineEnv.specFilter = function (spec) {
return htmlReporter.specFilter(spec);
};
var specs = [];
specs.push('spec/models/MyModel');
specs.push('spec/views/MyModelView');
$(function () {
require(specs, function () {
jasmineEnv.execute();
});
});
如果我没有毯子或 jasmine-blanket 作为上述函数的依赖项,这种方法可以很好地用于简单地进行单元测试。如果我添加它们(使用 require.config 路径和 shim),我可以验证它们是否已成功获取,但似乎发生的只是我得到 jasmine-blanket 的过载jasmine.getEnv().execute
,它只是打印“等待毯子...... "到控制台。没有什么会触发测试本身再运行。
我知道在我们的方法中没有办法提供通常的data-cover
属性,因为 RequireJS 正在执行脚本加载而不是脚本标记,但我希望在这种情况下,Blanket 至少会计算所有内容的覆盖率,而不是什么都没有。是否有一种基于非属性的方式来指定覆盖模式,一旦 jasmine-blanket 混合在一起,我还需要做些什么来触发实际的测试执行吗?可以使毯子与加载测试规范的 RequireJS 一起使用吗?