【发布时间】:2014-08-27 15:01:05
【问题描述】:
Ember 的测试助手andThen 和click 得到了奇怪的结果。根据 Ember 的documentation:
andThen助手将等待所有前面的异步助手 在继续前进之前完成。
但是,我发现情况并非总是如此。在下面的示例中,有 3 个 console.debug 语句。我希望他们以 A -> B -> C 的顺序登录。但我一直得到这个顺序:A -> C -> B。当我只使用两次单击中的一次时,我只能获得预期的 ABC 顺序帮手。没有与单击帮助程序中引用的 <div> 元素关联的事件侦听器(操作)。
谁能解释这种意外行为?我对助手的使用是否有错误?还是 Ember 测试框架的错误?
andThen(function() {
console.debug('mark A');
click('div:first'); // with just 1 click helper, debug order is ABC
click('div:first'); // with this second click helper, debug order is ACB
andThen(function() {
console.debug('mark B');
});
});
andThen(function() {
console.debug('mark C');
});
编辑:
根据 Kingpin2k 给出的答案,我最终寻求以下解决方案来获得我正在寻求的测试风格。
首先,我创建了一个名为next 的异步测试助手。其次,我将代码中的所有 andThen 助手替换为自定义的 next 助手。这让我的代码可以按照我期望的顺序运行。
// test-helper.js
Ember.Test.registerAsyncHelper('next', function(app, fn) {
fn();
});
// my-integration-test.js
next(function() {
console.debug('mark A');
click('div:first');
click('div:first');
next(function() {
console.debug('mark B');
});
});
next(function() {
console.debug('mark C');
});
【问题讨论】:
标签: javascript ember.js integration-testing