Unit testing 处理多个事件侦听器
更新:这是我的一个小问题。测试通过一次,下次失败: 问题是Unit testing 处理多个事件侦听器,unit-testing,qunit,Unit Testing,Qunit,更新:这是我的一个小问题。测试通过一次,下次失败: 问题是部门有事件。在(“userSet:company”)上,这两个变量都响应事件 这是一个关于单元测试的一般性问题。在我的应用程序中,某个事件被触发,我的应用程序的其他几个部分会侦听此事件。我想分别对每个部件进行单元测试,因为它们执行不同的功能;但要做到这一点,我必须在每次测试中触发事件 这会导致问题,因为第一个测试必须触发事件,从而触发其他测试中的侦听器。在仍然测试多个事件侦听器的情况下,如何保持测试的原子性 (我正在使用QUnit,但
部门
有事件。在(“userSet:company”)
上,这两个变量都响应事件
这是一个关于单元测试的一般性问题。在我的应用程序中,某个事件被触发,我的应用程序的其他几个部分会侦听此事件。我想分别对每个部件进行单元测试,因为它们执行不同的功能;但要做到这一点,我必须在每次测试中触发事件 这会导致问题,因为第一个测试必须触发事件,从而触发其他测试中的侦听器。在仍然测试多个事件侦听器的情况下,如何保持测试的原子性 (我正在使用QUnit,但我认为这是一个更一般的单元测试问题) 回答:
杰弗森是对的。解决这个问题的一个简单方法是使用events.once而不是events.on。通过这种方式,您可以清除每次测试中的事件。所有对异步方法的调用都应该使用“asyncTest”方法进行测试,并确保在断言数据准备好收集和分析时,将调用封装在调用QUnit.start()的其他函数中 我用工作代码更新了您的JSFIDLE: 新守则是:
QUnit.config.autostart = false;
QUnit.config.testTimeOut = 1000;
asyncTest('Some test that needs companies.', function() {
function getCompanies() {
var companies = new Companies();
ok(1);
start();
}
setTimeout(getCompanies, 500);
});
asyncTest('Some other async test that triggers a listener in companies.', function() {
var companies = new Companies();
events.trigger("userSet:company", { name: "Acme", id: 1 });
stop();
events.on('fetched:departments', function(response) {
console.log(response);
deepEqual(response, [1, 2, 3]);
start();
});
});
有关更多详细信息,请参见我在另一个问题中的回答:
希望这对你有帮助 所有对异步方法的调用都应该使用“asyncTest”方法进行测试,并确保在断言数据准备好收集和分析时,将调用封装在调用QUnit.start()的其他函数中 我用工作代码更新了您的JSFIDLE: 新守则是:
QUnit.config.autostart = false;
QUnit.config.testTimeOut = 1000;
asyncTest('Some test that needs companies.', function() {
function getCompanies() {
var companies = new Companies();
ok(1);
start();
}
setTimeout(getCompanies, 500);
});
asyncTest('Some other async test that triggers a listener in companies.', function() {
var companies = new Companies();
events.trigger("userSet:company", { name: "Acme", id: 1 });
stop();
events.on('fetched:departments', function(response) {
console.log(response);
deepEqual(response, [1, 2, 3]);
start();
});
});
有关更多详细信息,请参见我在另一个问题中的回答:
希望这对你有帮助