Ho appena iniziato a scrivere i miei primi test di unità in AngularJS tramite Jasmine.
In qualche modo ancora non capisco perché dovrei prendere in giro $ httpBackend. Per rendere chiaro ciò che è ancora chiaro per me Annoterò un piccolo esempio:
Immaginate Ho un servizio(myService) che sta ricevendo i dati da un URL:
function getData() {
return $http.get("http://example.com/data")
.then(function (response) {
return response.data;
});
}
Supponiamo che un GET chiamare all'URL "http://example.com/data" restituisce i seguenti dati:
{
firstname: "John",
lastname: "Doe"
}
la corrispondente prova sarebbe simile a questa:
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)
});
})
});
Se non erro, il test deve passare, anche se i dati deriso non è uguale ai dati reali. Il test passerebbe sempre, indipendentemente dal modo in cui ho impostato i Dati derisi, poiché la funzione di servizio verrebbe sempre reindirizzata a quanto impostato in $ httpBackend.whenGET ("http://example.com/data") .respond (mockData);.
ho pensato lo scopo di una tale prova è quello di verificare se i dati restituiti da una chiamata GET [in questo caso myService.getData()] è davvero i dati previsti e non alcuni dati deriso casuali. Quindi, qual è il vero punto di derisione dei dati invece di controllare se myService.getData restituisce i dati reali {firstname: "John", lastname: "Doe"}?
Sono ben consapevole che potrei anche impostare i dati deriso per {cognome: "John", cognome: "Doe"}, ma quando i dati reali del URL sarebbe dinamica, il beffe dei dati e i dati reali non sarebbero uguali di nuovo.
Grazie in anticipo!
Si sta accertando di chiamare l'URL corretto. –