我的所有ember-qunit测试都有类似的设置:
moduleFor('route:marketplace-search', 'Marketplace Search route', {
setup: function() {
setFixtures();
},
teardown: function() {
App.reset();
}
});
其中一个是抛出错误:
Uncaught TypeError: Cannot read property 'length' of null
这可以追溯到App.reset()
文件中的marketplace_search_spec.js
行:
DEBUG: ------------------------------- ember.js?body=1:14069
DEBUG: Ember : 1.7.0-beta.1+canary.3d81867a ember.js?body=1:14069
DEBUG: Ember Data : 1.0.0-beta.9+canary.45d196b2 ember.js?body=1:14069
DEBUG: Handlebars : 1.3.0 ember.js?body=1:14069
DEBUG: jQuery : 1.10.2 ember.js?body=1:14069
DEBUG: ------------------------------- ember.js?body=1:14069
Uncaught TypeError: Cannot read property 'length' of null ember.js?body=1:26529
__exports__.default.ArrayProxy.extend._resetSubControllers ember.js?body=1:26529
__exports__.default.ArrayProxy.extend.willDestroy ember.js?body=1:26542
apply ember.js?body=1:17952
superWrapper ember.js?body=1:17538
DeferredActionQueues.invoke ember.js?body=1:637
DeferredActionQueues.flush ember.js?body=1:687
Backburner.end ember.js?body=1:150
Backburner.run ember.js?body=1:205
apply ember.js?body=1:17955
run ember.js?body=1:16601
handleReset ember.js?body=1:2701
Backburner.run ember.js?body=1:201
apply ember.js?body=1:17955
run ember.js?body=1:16601
apply ember.js?body=1:17955
run.join ember.js?body=1:16643
Namespace.extend.reset ember.js?body=1:2710
moduleFor.teardown marketplace_search_spec.js?body=1:6
_callbacks.teardown ember-qunit.js?body=1:175
Test.teardown teaspoon-qunit.js?body=1:226
(anonymous function) teaspoon-qunit.js?body=1:366
process teaspoon-qunit.js?body=1:1455
(anonymous function) teaspoon-qunit.js?body=1:481
为什么我看到这种失败的任何想法?
Failures:
1) Marketplace Search route transitions to company.marketplace (1, 1, 2)
Failure/Error: Teardown failed on transitions to company.marketplace: 'null' is not an object (evaluating 'subControllers.length')
Finished in 7.94400 seconds
127 examples, 1 failure
答案 0 :(得分:3)
正如@AmielMartin所指出的那样,我的问题是由于我未在我的_super
覆盖的控制器init
函数中调用ArrayController
引起的。
App.MarketplaceSearchController = Ember.ArrayController.extend({
init: function() {
this._super();
// Do stuff here
}
});