我想对一个控制器进行单元测试,该控制器会在属性更改时触发一个事件。
控制器看起来像这样:
App.MyController = Ember.Controller.extend({
...
observeFilterFieldChanges: function() {
console.log("observeFilterFieldChanges");
this.setActiveSortField();
this.send("queryChanged");
}.observes("sorting.fields.@each.active"),
...
});
我的测试如下:
test('changing sort field via sort.fields will trigger query changed', function () {
var queryChangedCalled = false;
var tmpListController = App.MyController.create({
actions: {
queryChanged: function () {
console.log("querychanged called from controller");
queryChangedCalled = true;
}
}
});
// trigger the change
tmpListController.set("sorting.fields.0.active", true);
stop();
// not sure if I need to wait for the run loop to finish
Ember.run.schedule('afterRender', this, function () {
start();
ok(queryChangedCalled, "querChangedCalled should be true");
});
});
这不起作用,因为控制器中的操作 queryChanged 从未被调用。(但观察者确实被调用)
测试事件是否已发送的最佳方法是什么?
更新清晰:上面的代码在应用程序中运行良好。发送的动作很好地在路由中使用。我想要的只是单元测试以保护我免受未来的变化:)