茉莉花的回报在一家被嘲笑的工厂的承诺中被拒绝
Jasmine return rejected in a mocked factory's promise
我的控制器的初始化:
var init = function () {
httpUsers.getUsers().then(function (data) {
$timeout(function() {
// Do something...
});
}).catch(function (error) {
vm.error = "Me!";
toastr.error(error);
});
}
我的模拟服务:
beforeEach(function() {
module('httpService', function($provide) {
$provide.factory('httpUsers', function () {
var service = {
getUsers: getUsers
}
function getUsers() {
deferred = $q.defer(); // deferred is a global variable
deferred.resolve([
{ id: 1, firstName: "John", lastName: "Doe" },
{ id: 2, firstName: "Jane", lastName: "Doe" },
{ id: 3, firstName: "Jack", lastName: "Doe" }
]);
return deferred.promise;
};
return service;
});
});
});
一切正常,可以返回已解决的承诺。
但是,我想在控制器的 init 函数中测试 catch
子句。
我试过这个:
describe('init', function() {
it('should throw error', function () {
deferred.reject('testing');
expect(controller.error).toBe("Error!"); // NOTE: 'vm' is set to 'this', so controller is 'vm'
});
});
但我得到的只是:
Expected undefined to be 'Error!'.
我没有收到"测试","我!"或"错误! 如何强制拒绝测试中的承诺?
谢谢!
编辑
这是我的控制器注入:
beforeEach(inject(function(_$controller_, _$rootScope_, _$q_, _$timeout_, _global_) {
$rootScope = _$rootScope_;
$scope = _$rootScope_.$new();
$q = _$q_;
$timeout = _$timeout_;
global = _global_;
controller = _$controller_('usersController', {
$rootScope: $rootScope,
$scope: $scope,
$q: $q
});
$timeout.flush();
}));
如下所示
: -您的模拟服务
beforeEach(function() {
module('httpService', function($provide) {
$provide.factory('httpUsers', function () {
var service = {
getUsers: getUsers
}
function getUsers() {
deferred = $q.defer(); // deferred is a global variable
return deferred.promise;
};
return service;
});
});
});
您的拒绝测试
describe('init', function() {
it('should throw error', function () {
deferred.reject('testing');
$scope.$apply();
expect(controller.error).toBe("Error!");
});
});
您的解析测试
describe('init', function() {
it('should throw error', function () {
deferred.resolve([
{ id: 1, firstName: "John", lastName: "Doe" },
{ id: 2, firstName: "Jane", lastName: "Doe" },
{ id: 3, firstName: "Jack", lastName: "Doe" }
]);
$scope.$apply();
$timeout.flush();
expect(controller.error).toBe("Error!");
});
});
相关文章:
- 我的职位回报太快了,如何做出承诺
- 打破承诺链的好方法是什么
- 从函数返回角度承诺
- 谷歌日历 api 调用可以在角度工厂内返回承诺吗?
- 访问 angularjs 工厂数据之外的承诺
- 承诺在工厂内,承诺完成前返回
- 如何使用AngularJs工厂履行承诺
- jasmine 2.0测试angularjs的工厂方法,这是一个承诺
- 如何使用在 AngularJS 中返回承诺的$resource测试工厂
- 使用模拟工厂在茉莉花中测试嵌套承诺
- 从工厂返回控制器$http承诺时未定义
- 在工厂中回报承诺
- 茉莉花的回报在一家被嘲笑的工厂的承诺中被拒绝
- 如何确保在执行指令之前解决工厂承诺
- AngularJS,工厂,$scope和承诺斗争
- 在工厂兑现承诺
- angular:有承诺的集中资源工厂
- 如何测试一个使用$http返回$timeout承诺的AngularJS工厂方法.进入
- 同时使用http请求、承诺、ng-options和工厂或服务
- 承诺工厂不能在Nodejs中工作