我们已经成功地将Jasmine和RequireJS一起用于单元测试,现在正在寻找添加代码覆盖率的方法,为此,我一直在研究Blanket.js。我知道它名义上支持茉莉和RequireJS,而且我能够在GitHub上成功地使用“茉莉花需求is”跑步者,但是这个运行程序使用的方法与我们的模型略有不同--也就是说,它使用runner.html中的一个脚本标记加载测试规范,而我们的方法是通过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();
});
});如果没有毯子或茉莉花毯作为上述函数的依赖项,这种方法可以简单地进行单元测试。如果我添加它们(带有require.config路径和shim),我可以验证它们是否被成功地获取,但所有的情况似乎是我得到了茉莉花毯的过载jasmine.getEnv().execute,它只是打印“等待毯子.”到控制台去。没有什么能触发测试本身运行了。
我确实知道,在我们的方法中,无法提供通常的data-cover属性,因为RequireJS正在加载脚本,而不是脚本标记,但在这种情况下,我认为毯子至少会计算所有内容的覆盖范围,而不是什么都不计算。是否有一种非基于属性的方法来指定覆盖模式,如果混合了茉莉花毯子,我还需要做什么来触发实际的测试执行吗?毛毯能与RequireJS加载测试规格一起工作吗?
发布于 2013-10-18 16:02:00
我通过要求毛毯茉莉花然后设定选项来完成这个任务。
require.config({
paths: {
'jasmine': '...',
'jasmine-html': '...',
'blanket-jasmine': '...',
},
shim: {
'jasmine': {
exports: 'jasmine'
},
'jasmine-html': {
exports: 'jasmine',
deps: ['jasmine']
},
'blanket-jasmine': {
exports: 'blanket',
deps: ['jasmine']
}
}
});
require([
'blanket-jasmine',
'jasmine-html',
], function (blanket, jasmine) {
blanket.options('filter', '...'); // data-cover-only
blanket.options('branchTracking', true); // one of the data-cover-flags
require(['myspec'], function() {
var jasmineEnv = jasmine.getEnv();
jasmineEnv.updateInterval = 250;
var htmlReporter = new jasmine.HtmlReporter();
jasmineEnv.addReporter(htmlReporter);
jasmineEnv.specFilter = function (spec) {
return htmlReporter.specFilter(spec);
};
jasmineEnv.addReporter(new jasmine.BlanketReporter());
jasmineEnv.currentRunner().execute();
});
});关键行是添加BlanketReporter和currentRunner执行。毯子茉莉花适配器用一个只记录一行的no覆盖jasmine.execute,因为它需要停止执行,直到它准备好在检测代码之后才开始执行。
通常,BlanketReport和currentRunner执行将由毯子茉莉花适配器完成,但是如果您在require中加载毯子-茉莉花本身,启动毯子测试运行程序的事件将不会像订阅window.load事件那样被触发(按点说,window.load事件- jasmine已经被加载),因此我们需要添加报告并执行"currentRunner“,因为它通常会自己执行。
这可能会被作为一个bug引发,但就目前而言,这个解决方案工作得很好。
https://stackoverflow.com/questions/19409403
复制相似问题