używam jaśmin do testów jednostkowych jest angularjs kontroler, który ustawia zmienną w zakresie od wyniku wywołanie metody usługi, która zwraca obiekt obietnicyangularjs nie obiecuję być rozwiązany w badanej jednostki
var MyController = function($scope, service) {
$scope.myVar = service.getStuff();
}
wewnątrz usługa:
function getStuff() {
return $http.get('api/stuff').then(function (httpResult) {
return httpResult.data;
});
}
działa to dobrze w kontekście mojego angularjs aplikacji, ale nie działa w badanej jednostki jaśmin. Potwierdziłem, że wywołanie zwrotne "wtedy" jest wykonywane w teście jednostkowym, ale obietnica $ scope.myVar nigdy nie zostaje ustawiona na wartość zwracaną przez wywołanie zwrotne.
Moje testy jednostkowe:
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");
});
});
Również, jeśli mogę zmienić sterownika do następnego testu jednostkowego przechodzi:
var MyController = function($scope, service) {
service.getStuff().then(function(result) {
$scope.myVar = result;
});
}
Dlaczego zwrotna wartość wynik obietnica nie są propagowane do $ zakresu .myVar w teście jednostkowym? Zobacz następujący jsfiddle dla kodu pełny roboczego http://jsfiddle.net/s7PGg/5/
wielką odpowiedź, wydawało mi się, że brakowało trochę w docs. – robbymurphy
Jeśli kpisz z tylnego końca, tak jak ja, wynikiem będzie kompozycja z właściwością "dane" zawierającą rzeczywistą treść odpowiedzi. – Gepsens
W Angular 1.2 obietnice nie są już automatycznie rozwiązywane (AKA, unwrapped). – zhon