joh*_*njo 1 javascript unit-testing jasmine ember.js
我正在使用Jasmine对EmberJS项目进行单元测试,但我遇到了Ember需求API的问题.
当我尝试运行jasmine测试时,如果有问题的控制器有"需要"以及调用的init函数,则它们无法创建控制器实例
this._super()
我收到此控制台错误
"无法调用方法'有'null'
当我试图调试时,把我带到了Ember的肠道,但我无处可去.
任何人都知道我做错了什么
Application.SearchPendingController = Ember.ObjectController.extend({
needs: ['searchResults', 'search'],
shouldDisable: false,
searchResultsController: null,
init: function () {
this._super();
this.set('searchResultsController', this.controllerFor('searchResults'));
this.get('controllers.search.content').reload();
this.get('controllers.searchResults').set('content', this.get('controllers.search.content.results'));
},
transitionToResults: function () {
console.log('yay');
}.observes('this.searchResultsController.content')
});
Run Code Online (Sandbox Code Playgroud)
当我尝试创建此控制器时,jasmine测试会抛出错误
var searchPendingController = Application.SearchPendingController.create();
Run Code Online (Sandbox Code Playgroud)
有人对此有什么想法吗?
创建控制器时,Ember.js会检查needs
init方法中的dependencies().检查依赖项假设您有一个Ember.js应用程序,并且此应用程序的容器位于container
控制器的属性中.如果Ember.js为您创建了控制器,这一切都很有效.
你的错误发生在这里,在verifyDependencies
函数中.
如果您不希望Ember.js为您创建控制器并希望手动创建它(这是您在此处所做的),则需要手动将控制器的container
属性设置为应用程序的容器.
Application.SearchPendingController.reopen({
container: Application.__container__
});
Run Code Online (Sandbox Code Playgroud)
单元测试控制器很棘手,需要您深入了解Ember.js的内部.我的建议是,让Ember.js为您创建控制器,并使用集成测试而不是单元测试它们.
归档时间: |
|
查看次数: |
741 次 |
最近记录: |