我使用摩卡单元测试我的控制器。我的控制器看起来像:如何使用this.get('store')的单元测试控制器
AS.MyController = Ember.ObjectController.extend(Ember.Validations.Mixin, {
name: null,
description: null,
init: function() {
this._super();
this.get('store').find('something');
},
....
});
而且我的测试是这样开始的:
describe("MyControllerTest", function() {
//tried but didn't work
//delete AS.MyController.init;
var controller = AS.MyController.create();
.....
})
,浏览器总是会引发错误的“this.get(‘商店’)”在初始化呼叫。我不确定是否需要删除所有内容,或者需要解决它,因为我的测试用例根本不依赖于存储。无论哪种情况,我都无法在那里找到很多东西,并会非常感谢任何反馈。
感谢,迪伊
JSBIN:http://jsbin.com/aMASeq/3/
UPDATE: 可以有很多方法来解决这个问题,但我最终做的是重新构造控制器代码位把所有的函数调用存储到不同的动作中,然后在init中使用this.send('actioName')调用这些动作函数。在我的单元测试中,在实例化控制器之前,我重新打开控制器来修改这些动作函数(更改动作函数比改变init函数本身更容易,当尝试更改init时,我总是遇到一些js错误)。例如:
AS.MyController.reopen({actions: {setSomeActionThatUsesStore: function() {
//do something that doesn't involve using store
}}});
为什么你打电话给商店查找里面的init? –
我在句柄模板中有一个select元素,它由查找调用返回的内容填充。我没有这个控制器的路由器,因为我通过另一个模板中的“渲染控制器”调用它。 –
抛出的错误是什么? –