プロパティの変更時にイベントを発生させるコントローラをユニットテストしたいと思います。Ember.js:コントローラのアクションをテストする方法
コントローラは次のようなものになります。
App.MyController = Ember.Controller.extend({
...
observeFilterFieldChanges: function() {
console.log("observeFilterFieldChanges");
this.setActiveSortField();
this.send("queryChanged");
}.observes("[email protected]"),
...
});
をそして、私のテストでは、以下の通りである。
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アクションが呼び出されることはありませんので、これは動作しません。 (しかし、オブザーバーが呼び出される)
イベントが送信されたかどうかをテストする最良の方法は何ですか?
明快にするための更新: 上記のコードは、アプリケーションで素晴らしい動作します。送信されたアクションはルートでうまく消費されます。私が望むのは、将来の変更から私を守るための単体テストです。
私はあなたが燃えさしテストの質問をして感謝しています。しかし、あなたのコードからメッセージが混ざり合っています。オブザーバーをトリガする方法にもっと興味がありますか?あなたのコードは単にあなたのテストからsendメソッドを呼び出さないのですか?どちらも興味深い質問ですが、どちらも簡潔なコード例と異なるタイトルで表現する方が良いでしょう。 –