我使用茉莉單元測試的angularjs控制器上設置的範圍的變量來調用返回一個承諾對象服務的方法的結果被解析該服務:Angularjs承諾不在單元測試
function getStuff() {
return $http.get('api/stuff').then(function (httpResult) {
return httpResult.data;
});
}
這在我的angularjs應用程序的上下文中工作正常,但不能在茉莉花單元測試中工作。我已經確認「then」回調正在單元測試中執行,但$ scope.myVar promise永遠不會被設置爲回調的返回值。
我的單元測試:
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");
});
});
另外,如果我控制器更改爲以下的單元測試通過:
var MyController = function($scope, service) {
service.getStuff().then(function(result) {
$scope.myVar = result;
});
}
爲什麼承諾回調結果值不被傳播到$範圍.myVar在單元測試中?看到下面的jsfiddle的全部工作代碼http://jsfiddle.net/s7PGg/5/
偉大的答案,我似乎已經錯過了在文檔該位。 – robbymurphy 2013-02-24 16:11:26
如果您像我一樣嘲笑後端,結果將是一個包含實際響應內容的屬性「數據」的組合。 – Gepsens 2013-05-26 18:12:42
在Angular 1.2中,承諾不再自動解決(AKA,unwrapped)。 – zhon 2014-10-16 05:11:56