在单元测试中,我正在控制器中调用一个动作,该控制器又将动作发送到路由:
this.send('setRandomPage', this._generateRandomPage(this.get('count')));
在这一行中,它的结尾是:
TypeError: Cannot read property 'trigger' of undefined
at Class.send
是否可以用Sinon覆盖send方法,使其通过? this
正确指向我的控制器。
答案 0 :(得分:0)
我建议模拟您的target
的{{1}}属性。如果触发了您的控制器上不存在的操作,它将冒泡到Controller
。对于控制器,这是相应的路由。通常,您可以通过target
对正在测试的实例进行构造的模拟。您可以通过使用Sinon来达到相同的目的,但是无需引入其他依赖关系并且代码可读性强。
让我们假设我们有一个像这样的控制器:
this.subject()
我们可以像这样对export default Controller.extend({
actions: {
sendActionToRoute() {
this.send('actionOnRoute');
}
}
});
进行单元测试:
sendActionToRoute
请在这里找到一个演示这种方法的余烬:https://ember-twiddle.com/dd417cf8757607cdd669448c42ce7bbc?numColumns=2&openFiles=controllers.my-controller.js%2Ccontrollers.my-controller.js