我使用茉莉单元测试的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