Sto usando il gelsomino di unit test un controller angularjs che imposta una variabile della portata per il risultato della chiamata di un metodo di servizio che restituisce un oggetto promessa:Angularjs non promette di essere risolti in unit test
var MyController = function($scope, service) {
$scope.myVar = service.getStuff();
}
all'interno il servizio:
function getStuff() {
return $http.get('api/stuff').then(function (httpResult) {
return httpResult.data;
});
}
Questo funziona bene nel contesto della mia applicazione angularjs, ma non funziona nel test di unità di gelsomino. Ho confermato che il callback "then" è in esecuzione nel test unitario, ma la promessa $ scope.myVar non viene mai impostata sul valore restituito del callback.
Il mio test di unità:
describe('My Controller', function() {
var scope;
var serviceMock;
var controller;
var httpBackend;
beforeEach(inject(function ($rootScope, $controller, $httpBackend, $http) {
scope = $rootScope.$new();
httpBackend = $httpBackend;
serviceMock = {
stuffArray: [{
FirstName: "Robby"
}],
getStuff: function() {
return $http.get('api/stuff').then(function (httpResult) {
return httpResult.data;
});
}
};
$httpBackend.whenGET('api/stuff').respond(serviceMock.stuffArray);
controller = $controller(MyController, {
$scope: scope,
service: serviceMock
});
}));
it('should set myVar to the resolved promise value',
function() {
httpBackend.flush();
scope.$root.$digest();
expect(scope.myVar[0].FirstName).toEqual("Robby");
});
});
Inoltre, se cambio il controller a seguito del test di unità passa:
var MyController = function($scope, service) {
service.getStuff().then(function(result) {
$scope.myVar = result;
});
}
Perché non il valore del risultato di callback promessa di essere propagata a $ portata .myVar nel test dell'unità? Vedi il seguente jsfiddle per codice completo funzionante http://jsfiddle.net/s7PGg/5/
grande risposta, mi sembrava di aver perso quel po 'nella documentazione. – robbymurphy
Se stai prendendo in giro il back-end come lo sono io, il risultato sarà un composito con una proprietà "dati" che contiene il contenuto della risposta effettiva. – Gepsens
In Angular 1.2, le promesse non vengono più risolte automaticamente (AKA, unwrapped). – zhon