Unit testing 在浏览器中有选择地运行Mocha测试

Unit testing 在浏览器中有选择地运行Mocha测试,unit-testing,requirejs,mocha.js,Unit Testing,Requirejs,Mocha.js,我想有选择地在浏览器中运行mocha测试,即使在多个带有测试的文件都加载了requirejs之后。现在,如果我用requirejs加载user\u model\u测试和user\u view\u测试,那么每次调用mocha.run之后,所有这些测试都会运行 最终目标是根据表单上的用户复选框有选择地运行测试,并且只有这些测试显示在浏览器中。现在,这是第一次有选择地加载和运行测试,但是一旦加载了测试,即使用户取消选中复选框,测试仍然会运行,因为之前的测试是必需的 摩卡框架内是否有解决方案?还是我必须

我想有选择地在浏览器中运行mocha测试,即使在多个带有测试的文件都加载了requirejs之后。现在,如果我用requirejs加载user\u model\u测试和user\u view\u测试,那么每次调用mocha.run之后,所有这些测试都会运行

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

摩卡框架内是否有解决方案?还是我必须以某种方式转储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();
})

当同时使用requirejs和摩卡咖啡时:

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

诀窍是每次运行测试后,使用require.unde从上下文中删除测试。一旦这样做了,您就可以在下次运行您想要的任何测试了

        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行,它们从上下文中删除了测试文件