如何在Emberjs中直接调用路径上的事件处理程序?

时间:2013-04-30 10:40:28

标签: ember.js ember-router

我希望使用我选择的测试框架jasmine在ember.js中对路径的事件处理程序进行存根/侦察。通常这涉及用间谍覆盖感兴趣的功能,这需要访问定义方法的对象:

spy = spyOn(someObject, "methodOnThatObject")

但在Ember中,我的路线的事件处理程序定义如下:

App.ActivityRoute = Ember.Route.extend({
  events: {
    show: function(context) {
    }
  }
});

我想将函数show存根,但我不知道如何获取最终定义它的对象?或者它是否曾在某个对象上定义过?也许用#call或#apply调用它?如果是这样,那么如何存根呢?

我试过挖掘源头,但没有设法弄清楚如何处理。任何指向我应该在源中查看的位置的指针也会有所帮助。

干杯, 凯文

2 个答案:

答案 0 :(得分:1)

傻傻的我。我可以做以下事情:

route = App.__container__.lookup('route:myRoute')
spy = spyOn(route.get('events'), 'show')
controller.send('show')
expect(spy).toHaveBeenCalled()

这很有效。

答案 1 :(得分:1)

您可以使用send('eventName', [optional record])

如果您在同一路线下从控制器拨打电话:

this.get('target').send('show', this.get('content'))