在浏览器中选择性地运行Mocha测试

时间:2014-11-19 00:48:02

标签: unit-testing requirejs mocha

我想在浏览器中有选择地运行mocha测试,即使多个带有测试的文件已经加载了requirejs。目前,如果我使用require js加载user_model_tests和user_view_tests,那么每次调用mocha.run()之后,所有这些都会运行。

最终目标是根据用户在表单上的复选框选择性地运行测试,并且只在浏览器中显示这些测试。现在,这是第一次有选择地加载和运行测试,但是一旦加载了测试,即使用户取消选中框,测试仍然会运行,因为它们之前是必需的。

mocha框架中是否有解决方案?或者我必须以某种方式转储requirejs的缓存?

var TestRunner = {
    start: function(tests) {
        require(tests, function(require) { mocha.run() });
    },

    formListener: function() {
        $('form.test-selector').submit(function(event) {
            event.preventDefault();
            var choices = $('form.test-selector input.test-choice');
            var selections = []
            _.forEach(choices, function(choice) {
                if ($(choice).is(':checked')) {
                    selections.push($(choice).val());
                }
            })
            TestRunner.start(selections);
        })
    }
};

$(document).ready(function() {
    TestRunner.formListener();
})

1 个答案:

答案 0 :(得分:0)

同时使用requirejs和mocha:

Mocha将运行上下文中requirejs加载的任何测试。

技巧是使用require.undef()在每次运行测试后从上下文中删除测试。完成此操作后,您将拥有一个干净的平板,以便下次运行您想要的任何测试。

        start: function(tests) {
        $('#mocha').html('');

        require(tests.concat('vendor/mocha'), function() {
            var mocha = _(arguments).last();
            mocha.setup('bdd');
            var expect = chai.expect
            chai.use(chaijquery);

            mocha.run();
        });

        require.undef('vendor/mocha')
        tests.forEach(function(test) {
            require.undef(test);
        })
    },

(注意从上下文中删除测试文件的最后4行。)