Testing Ember.js Mocha测试使用异步代码随机失败

Testing Ember.js Mocha测试使用异步代码随机失败,testing,ember.js,promise,mocha.js,Testing,Ember.js,Promise,Mocha.js,我正在用Mocha为一个Ember.js应用程序编写测试。我用的是Teddy Zeenny的ember摩卡适配器 一旦涉及到承诺,测试就会随机失败。我通常会遇到这样的错误: Error: Assertion Failed: You cannot defer readiness since the `ready()` hook has already been called. 这是一本书。它包含10次相同的测试,通常失败(使用Firefox和Chromium进行测试) 同样的测试在QUnit上运

我正在用Mocha为一个Ember.js应用程序编写测试。我用的是Teddy Zeenny的ember摩卡适配器

一旦涉及到承诺,测试就会随机失败。我通常会遇到这样的错误:

Error: Assertion Failed: You cannot defer readiness since the `ready()` hook has already been called.
这是一本书。它包含10次相同的测试,通常失败(使用Firefox和Chromium进行测试)

同样的测试在QUnit上运行良好(可能是偶然的:)()。我怎样才能用摩卡咖啡做到这一点?我尝试在一个Ember.run()调用中包装这个承诺,但它没有解决问题


同样的问题也存在,但是Teddy Zeenny提出的修正JS Bin对我来说也失败了。

真正的唯一原因是qunit有效而mocha无效,是因为您在每次测试前运行重置,而不是在每次测试后运行重置


代码有3个问题:

  • 它不应该调用mocha.setup(),如自述文件中所述
  • 对setup Ember.js进行测试的函数调用应该发生在任何Mocha回调之外,而不是在
    before()
  • mocha.run()
    应该这样调用:

    Ember.$(function() {
      mocha.run();
    });
    
  • 这是固定的


    Teddy Zeenny在中找到了这个问题的解决方案。

    事实上,我在将测试转换为QUnit时犯了一个错误,感谢您指出这一点。我想在测试后调用App.reset()。我更正了使用teardown()而不是setup()的错误,它仍然有效。不管怎么说,您的更改对我来说仍然失败(第一个测试用例的断言失败错误消息):(.gotcha,每次在chrome中它都对我有效,我甚至没有尝试firefox,但在那里它似乎更零星