我正在使用 mocha 对我的控制器进行单元测试。我的控制器看起来像:
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();
.....
})
并且浏览器总是在 init 调用“this.get('store')”时抛出错误。我不确定是否需要将事情存根,或者是否有解决方法,因为我的测试用例根本不依赖存储。在任何一种情况下,我都找不到太多东西,并且非常感谢任何反馈。
谢谢,迪
JSBIN:http: //jsbin.com/aMASeq/3/
更新: 有很多方法可以解决这个问题,但我最终做的是通过将所有函数调用存储到单独的动作中来重新构造控制器代码,然后在 init 中我使用调用这些动作函数this.send('actionName')。在我的单元测试中,在实例化控制器之前,我重新打开控制器以修改这些动作函数(更改动作函数比更改 init 函数本身更容易,当尝试更改 init 时,我总是遇到一些 js 错误)。例如:
AS.MyController.reopen({actions: {setSomeActionThatUsesStore: function () {
//do something that doesn't involve using store
}}});