首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果测试本身装载了Blanket.js,那么RequireJS是否可以与茉莉花测试一起工作?

如果测试本身装载了Blanket.js,那么RequireJS是否可以与茉莉花测试一起工作?
EN

Stack Overflow用户
提问于 2013-10-16 17:02:56
回答 1查看 1.9K关注 0票数 1

我们已经成功地将Jasmine和RequireJS一起用于单元测试,现在正在寻找添加代码覆盖率的方法,为此,我一直在研究Blanket.js。我知道它名义上支持茉莉和RequireJS,而且我能够在GitHub上成功地使用“茉莉花需求is”跑步者,但是这个运行程序使用的方法与我们的模型略有不同--也就是说,它使用runner.html中的一个脚本标记加载测试规范,而我们的方法是通过requirejs加载规范,如下所示(这是运行程序中的需求调用的回调):

代码语言:javascript
复制
    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加载测试规格一起工作吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-18 16:02:00

我通过要求毛毯茉莉花然后设定选项来完成这个任务。

代码语言:javascript
复制
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引发,但就目前而言,这个解决方案工作得很好。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19409403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档