Vorrei testare un controller, che genera un evento quando una proprietà cambia.Ember.js: come testare le azioni nel controller
Il controller simile a questa:
App.MyController = Ember.Controller.extend({
...
observeFilterFieldChanges: function() {
console.log("observeFilterFieldChanges");
this.setActiveSortField();
this.send("queryChanged");
}.observes("[email protected]"),
...
});
E la mia prova è la seguente:
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");
});
});
Questo non funziona perché l'azione queryChanged nel controller non è mai chiamato. (Ma l'osservatore viene chiamato)
Qual è il modo migliore per testare se l'evento è stato inviato?
Aggiornamento per chiarezza: Il codice sopra riportato funziona perfettamente nell'app. L'azione inviata è ben consumata nella Route. Tutto quello che voglio è unit test per proteggermi dai cambiamenti futuri :)
Sono grato che ti chiede una domanda di test brace. Tuttavia, ricevo messaggi misti dal tuo codice, sei più interessato a come attivare un osservatore? Il tuo codice non chiama semplicemente il metodo di invio dal tuo test? Entrambe sono domande interessanti, ma entrambe sarebbero meglio espresse con esempi di codice più succinti e possibilmente con un titolo diverso. –