Javascript Ember.JS集成测试问题,然后单击helpers
我在Ember的测试助手中得到了奇怪的结果Javascript Ember.JS集成测试问题,然后单击helpers,javascript,ember.js,integration-testing,Javascript,Ember.js,Integration Testing,我在Ember的测试助手中得到了奇怪的结果,然后和单击。根据恩伯的报告: 和第助手将等待前面的所有异步助手 在前进之前完成 然而,我发现情况并非总是如此。在下面的示例中,有3个console.debug语句。我希望他们以A->B->C的顺序登录。但我始终得到这个顺序:A->C->B。我只能在使用两个单击帮助程序中的一个时才能得到预期的ABC顺序。没有与click helpers中引用的元素关联的事件侦听器(操作) 有人能解释这种意外的行为吗?我使用助手时有错误吗?或者是Ember的测试框架的bu
,然后
和单击
。根据恩伯的报告:
和第
助手将等待前面的所有异步助手
在前进之前完成
然而,我发现情况并非总是如此。在下面的示例中,有3个console.debug
语句。我希望他们以A->B->C的顺序登录。但我始终得到这个顺序:A->C->B。我只能在使用两个单击帮助程序中的一个时才能得到预期的ABC顺序。没有与click helpers中引用的
元素关联的事件侦听器(操作)
有人能解释这种意外的行为吗?我使用助手时有错误吗?或者是Ember的测试框架的bug
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
的异步测试助手。其次,我用自定义的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');
});
然后
只是创建了lastpromiseembersaw的语法糖。然后
看起来像这样:
lastPromiseEmberSawCreated.then(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
nextLastPromiseEmberSawCreated.then(function() {
console.debug('mark B');
});
});
// the promise won't have changed in between these two `andThen` calls
// because Ember had no cpu time, and you didn't make any additional calls
lastPromiseEmberSawCreated.then(function(){
console.debug('mark C');
});
不再有理由在测试中使用和,这有望减少混淆。您可以重写示例(假设该示例位于标记为async
的函数中):
console.debug('mark A');
await click('div:first');
await click('div:first');
console.debug('mark B');
console.debug('mark C');
语句按顺序执行。您的解释与我在上的文档中理解的不同。但是您的解释很有意义,并引导我找到了我在编辑的文章中描述的解决方案。它有点隐藏,但在这条语句中暗示了它注意,然后有一个包含de将在其他测试帮助程序完成后执行。
,但此语句第二个帮助程序将等待前面的所有异步帮助程序完成,然后再继续执行。
具有误导性,您确实需要一起阅读它们以获得准确的语句。这确实意味着插入的代码在cu之前不会执行当前的全局承诺完成了,但它将继续在第三个之外使用代码。