我想在浏览器中有选择地运行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();
})
答案 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行。)