Ich habe gerade meine ersten Komponententests in AngularJS über Jasmine geschrieben.
Irgendwie verstehe ich immer noch nicht, warum ich das $ httpBackend verspotten sollte. Um deutlich zu machen, was mir noch unklar ist, werde ich ein kleines Beispiel aufschreiben:
Stellen Ich habe ein Service(myService), die Daten von einer URL wird immer:
function getData() {
return $http.get("http://example.com/data")
.then(function (response) {
return response.data;
});
}
Nehmen wir an, dass ein GET an die URL aufrufen "http://example.com/data" liefert folgende Daten:
{
firstname: "John",
lastname: "Doe"
}
die entsprechende Test würde wie folgt aussehen:
describe("Service: myService", function() {
beforeEach(module("myApp"));
var myService, $httpBackend;
beforeEach(inject(function (_myService_, _$httpBackend_) {
myService = _myService_;
$httpBackend = _$httpBackend_;
}));
afterEach(function() {
$httpBackend.verifyNoOutstandingExpectation();
$httpBackend.verifyNoOutstandingRequest();
});
it("should get data", function() {
var mockData = {datakey: "datavalue"};
$httpBackend.whenGET("http://example.com/data").respond(mockData);
var promise = myService.getData();
$httpBackend.flush();
promise.then(function(response){
expect(response).toEqual(mockData)
});
})
});
Wenn ich nicht irre, sollte der Test bestehen, obwohl die verspottete Daten nicht gleich den realen Daten ist. Der Test würde immer bestehen, egal wie ich die mokierten Daten einstelle, weil die Service-Funktion immer zu dem weitergeleitet würde, was in $ httpBackend.whenGET gesetzt ist ("http://example.com/data") .respond (mockData);. wenn die zurückgegebenen Daten von einem GET Anruf
Ich dachte, der Zweck eines solchen Tests zu überprüfen ist, [in diesem Fall myService.getData()] wirklich die erwarteten Daten und nicht einige zufällige verspott Daten. Also, was ist der eigentliche Punkt der Mocking Daten, anstatt zu überprüfen, ob myService.getData die realen Daten {Vorname: "John", Nachname: "Doe"}?
Ich bin mir bewusst, dass ich auch die verspottete Daten zu {Vornamen: „John“, Nachnamen: „Doe“} einstellen könnte, aber wenn die realen Daten aus der URL dynamisch sein würden, Daten des verspottet und die realen Daten wären nicht wieder gleich.
Vielen Dank im Voraus!
Sie stellen sicher, dass Sie die gute URL anrufen. –