Ich habe einige Probleme herauszufinden, wie man Tests für eine Controller-Methode korrekt schreibt, die einen Angular-Dienst aufrufen und einen bestimmten Wert zurückgeben muss, aber ich muss dazu in der Lage sein Testen Sie den Code innerhalb der Funktion .then() danach. HierRückgabe von Werten aus einem mokierten eckigen Service und Aufruf durch
ist die Grundidee:
// Controller
$scope.myMethod = function() {
methodName.connect().then(
function(returnValue) {
if (returnValue.prop === 1) {
$scope.callMade = true;
$rootScope.$emit('callWasMade');
}
},
function() {
$rootScope.$emit('callWasNotMade');
}
);
};
Deshalb möchte ich den Aufruf der Methode auf dem $ Umfang zu testen, rufen Sie die methodName.connect() Funktion, aber ich möchte eine Antwort verspotten (Überschreiben return) aber die Funktion immernoch normal laufen lassen. Etwas wie:
// Test
describe('connecting to method', function() {
it('should do nothing when returnValue.prop does not equal 1', function() {
spyOn(methodName, 'connect').and.returnValue({ prop: 2 });
scope.myMethod();
expect(scope.callMade).toBeFalsy();
});
it('should pass when returnValue.prop does equal 1', function() {
spyOn(methodName, 'connect').and.returnValue({ prop: 1 });
scope.myMethod();
expect(scope.callMade).toBeTruthy();
});
});
Außer diesem gibt
undefined is not a constructor (evaluating 'methodName.connect().then') (...)
Wie kann ich die Ausgabe von methodName.connect auf diese Weise kontrollieren?
Danke.
Weil 'methodName' ist nicht auf den Umfang angebracht sind, können Sie ein Spion wie' spyOn (methoden, 'connect') erstellen '. Ihr Problem ist, dass Ihre Codes die Bedenken nicht trennen. Es ist also schwer zu testen. – Qianyue
Also sollte ich methodName an den Bereich angehängt? In diesem Beispiel soll methodName einen Service darstellen. – AMcI