【问题标题】:Ember.js Mocha tests failing randomly with async codeEmber.js Mocha 测试使用异步代码随机失败
【发布时间】:2014-04-03 14:25:54
【问题描述】:

我正在使用 Mocha 为 Ember.js 应用程序编写测试。我使用的是 Teddy Zeenny 的 ember-mocha-adapter。

一旦涉及到一个 Promise,测试就会随机失败。我通常会收到此错误:

Error: Assertion Failed: You cannot defer readiness since the `ready()` hook has already been called.

这是JS Bin testcase。它包含 10 次相同的测试,但通常会失败(用 Firefox 和 Chromium 测试)。

同样的测试在 QUnit 上运行良好(也许是偶然的 :))(JS Bin testcase)。我怎样才能使这个工作与摩卡?我尝试在 Ember.run() 调用中包装承诺,但它并没有解决问题。

another question 也有同样的问题,但是 Teddy Zeenny 提出的更正的 JS Bin 对我来说也失败了。

【问题讨论】:

    标签: testing ember.js promise mocha.js


    【解决方案1】:

    代码有3个问题:

    1. 它不应该调用 mocha.setup(),正如现在在 README 中所解释的那样。
    2. 设置 Ember.js 以进行测试的函数调用应该发生在任何 Mocha 回调之外,而不是在 before() 中。
    3. mocha.run() 应该这样调用:

      Ember.$(function() {
        mocha.run();
      });
      

    这里是固定的JS Bin testcase

    Teddy Zeenny 在teddyzeenny/ember-mocha-adapter#18 中找到了解决此问题的方法。

    【讨论】:

      【解决方案2】:

      qunit 能正常工作而 mocha 不能正常工作的唯一原因是您在每次测试之前和每次测试之后都在运行 reset。

      http://emberjs.jsbin.com/nusewoqi/4/edit

      【讨论】:

      • 确实,我在将测试转换为 QUnit 时犯了一个错误,感谢您指出这一点。我的意思是在测试后调用 App.reset() 。我更正了 QUnit testcase 以使用 teardown() 而不是 setup() 并且它仍然有效。无论如何,随着您的更改,它对我来说仍然失败(第一个测试用例的 Assertion Failed 错误消息):(.
      • 知道了,它每次在 chrome 中都对我有用,我什至没有尝试过 firefox,但那里似乎比较零星
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-28
      • 1970-01-01
      相关资源
      最近更新 更多