一个通过 Ember 集成测试破坏了下一个:糟糕的拆卸块?

One passing Ember integration test breaks the next one: bad teardown block?

我有这两个 Ember 集成测试,A 和 B。(我还有很多,但在调试时我已经删除了所有其他测试以隔离问题。有 9 个测试在与 A 相同的文件中,我评论了另一个 8.) 如果 A 在 B 之前运行,则 B 将失败。如果B自己跑,或者先于A跑,就pass。

从这个描述看来很明显,A 正在对测试环境做一些事情,从而搞砸了 B。然而,在对测试和涉及日志消息的生产代码进行大量加盐之后,我离弄清楚还差得远怎么了,如果有明显的问题,我希望其他人可以发现。

现在我正在仔细查看两个测试中的 afterEach 块。以下是测试 A 的 beforeEachafterEach 块的概要:

beforeEach: function() {
  server = new Pretender(function() {
    // Pretender setup removed for brevity
  });

  App = startApp();
},
afterEach: function() {
  server.shutdown();
  Ember.run(App, App.destroy);
}

afterEach 几乎就是常用的 ember-cli 代码,但它让我有点困惑。 The documentation on Ember.run() 建议它应该得到一个函数作为参数,但我们在这里没有给它一个,所以我不确定它是如何工作的。而且,Pretender shutdown() 调用应该在 Ember.run 内(还是在它自己的 Ember.run 内)?

版本,备案:ember-cli 0.2.0,Ember 1.10.1。

ETA:当我更新到 ember-cli 0.2.3 和 Ember 1.11.3 时,问题就消失了。现在如果我能弄清楚 the other failing tests we have with that update...

您的设置和拆卸看起来不错。它们很常用并且定义正确。

但是,ember-qunit 上存在(仍然)未解决的问题,关于未正确拆除应用程序 - take a look here to see the progress

如您所说,Ember 1.13 中不会发生这种情况。