Ich habe eine einzige Aktion in einem Ember-Controller definiert, die 2 separate Funktionen, die Teil des Controllers sind aufgerufen. Ich möchte diese Funktionen in einem Komponententest ausspionieren, um zu bestätigen, ob die Aktionsmethode die richtige Funktion aufgerufen hat.Wie Unit-Test ein Glut-Controller
Mein Controller sieht wie folgt aus:
export default Ember.Controller.extend({
functionA() {
return;
},
functionB() {
return;
},
actions: {
actionMethod(param) {
if(param) {
return this.functionA();
}
else {
return this.functionB();
}
}
}
});
In der Praxis arbeitet der Regler jedoch in der Unit-Test, praktischen und FunktionD sind beide nicht definiert. Ich habe versucht, this
auf der Konsole zu loggen, aber nicht finden, wo FunktionA und FunktionB sind, so dass ich nicht in der Lage, sie richtig zu verspotten. Ich erwartete, dass sie sich in der obersten Ebene des Objekts neben Aktionen befinden, aber ich fand nur mit actionMethod
richtig definiert.
My Unit-Test sieht aus wie unten
const functionA = function() { return; }
const functionB = function() { return; }
test('it can do something', function(assert) {
let controller = this.subject();
// I don't want the real functions to run
controller.set('functionA', functionA);
controller.set('functionB', functionB);
controller.send('actionMethod', '');
// raises TypeError: this.functionA is not a function
// this doesn't work etiher
// controller.functionB = functionB;
// controller.functionA = functionA;
// controller.actions.actionMethod();
}
Hat jemand irgendwelche Ideen, wie ich diese Funktionen in der Testumgebung ersetzen kann? Oder gibt es vielleicht eine bessere Möglichkeit, diese Funktionalität zu testen oder meinen Controller einzurichten?
- bearbeiten Tippfehler: this.subject()
Side Hinweis: 1. Um Controller-Objekt zu erstellen, müssen Sie 'this_subject()' aufrufen. 2. 'controller.send' Methode wird keinen Wert an den Aufrufer zurückgeben. – kumkanillam
Whoops typo - Ich habe 'thissubject()' aufgerufen. Wie für 'controller.send', versuchte ich diese Methode wie oben gezeigt sowie' controller.actions.actionMethod() ' – user2989731