无法在单元测试中将操作从控制器发送到路由

时间:2018-10-08 02:55:23

标签: ember.js sinon qunit

在单元测试中,我正在控制器中调用一个动作,该控制器又将动作发送到路由:

this.send('setRandomPage', this._generateRandomPage(this.get('count')));

在这一行中,它的结尾是:

TypeError: Cannot read property 'trigger' of undefined
    at Class.send 

是否可以用Sinon覆盖send方法,使其通过? this正确指向我的控制器。

1 个答案:

答案 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