Ember-CLI 生成的验收测试失败

Ember-CLI Generated Acceptance Test Fails

我有一个非常基本的 Ember-CLI 应用程序 运行 大约 75 个 QUnit 断言全部通过。当我生成验收测试时:

ember generate acceptance-test games

产生:

import Ember from 'ember';
import { module, test } from 'qunit';
import startApp from '../helpers/start-app';

var application;

module('Acceptance: Games', {
  beforeEach: function() {
    application = startApp();
  },

  afterEach: function() {
    Ember.run(application, 'destroy');
  }
});

test('visiting /games', function(assert) {
  visit('/games');

  andThen(function() {
    assert.equal(currentPath(), 'games');
  });
});

然后我的测试开始在路由的 JSHint 单元测试上中断:

52. JSHint - unit/routes/games: global failure (1, 0, 1)
1. Uncaught Error: Assertion Failed: calling set on destroyed object
Source: http://localhost:4200/assets/vendor.js:14407

我刚刚开始这些 Ember-CLI 集成测试,所以我可能遗漏了什么?错误似乎是我正在设置某些东西但没有在其他地方正确拆除它?即使是这样,我也不确定为什么添加一个验收测试会产生这种结果,而没有测试一切都会通过。

控制台还显示:

WARNING: Library "App" is already registered with Ember.
ember.debug.js:3940 Uncaught Error: Assertion Failed: calling set on destroyed object

作为参考,我在:

DEBUG: Ember      : 1.10.0
DEBUG: Ember Data : 1.0.0-beta.15
DEBUG: jQuery     : 1.11.2

提前致谢,

更新:

从验收测试中删除生成的代码并替换为类似以下内容时:

assert.ok(true);

所有测试都通过了。只要我添加如下内容:

visit('/games');

然后我开始在各种单元测试中随机看到 "calling set on a destroyed object" 错误。

我终于找到了。问题在于一个初始化器,它本质上创建了一个 运行 时钟(类似于 this),我用它来随着时间的推移重绘视图。

我的初始化程序使用 setTimeout 更新初始化程序的属性。鉴于错误消息,我假设初始化器的寿命比给定的测试长,并且在被销毁后调用 setProperties

目前,我用以下方式包裹了我的计时器:

if (!this.get('isDestroyed') && !this.get('isDestroying')) {
...
}

只是为了让测试通过,但似乎我应该一起摆脱 setTimeout 以支持 Ember.run.later?