我在Ember的测试助手andThenclick中得到了奇怪的结果。根据Ember的documentation:



但是,我发现情况并非总是如此。在下面的示例中,有3个console.debug语句。我希望它们以A-> B-> C的顺序登录。但是我始终得到以下顺序:A-> C->B。当我只使用两次单击中的一个时,我只能获得期望的ABC顺序。 helper 。在点击帮助器中没有与<div>元素关联的事件监听器( Action )。

谁能解释这种意外行为?我在使用助手时是否存在错误?还是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');
});

最佳答案

andThen只是lastPromiseEmberSawCreated.then的语法糖,因此实际上看起来像这样:

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');
});

关于javascript - 与andThen的Ember.JS集成测试问题,然后单击帮助器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25530576/

10-09 22:25