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
?
我有一个非常基本的 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
?