Javascript 角资源承诺捕获,茉莉花托瑟罗()

Javascript 角资源承诺捕获,茉莉花托瑟罗(),javascript,angularjs,jasmine,karma-jasmine,angular-mock,Javascript,Angularjs,Jasmine,Karma Jasmine,Angular Mock,我在角度控制器中有一些代码: user是一个angular$资源,在调用get方法时返回一个承诺 $scope.credentials = { username:"", password:"", rememberMe:false }; var currentUser = {}; $scope.login = function(callback){ user.get($scope.credentials)

我在角度控制器中有一些代码:

user是一个angular$资源,在调用get方法时返回一个承诺

$scope.credentials = {
        username:"",
        password:"",
        rememberMe:false
    };

var currentUser  = {};

$scope.login = function(callback){
        user.get($scope.credentials)
            .$promise
            .then(function(user){
                $scope.currentUser = user;
                return cb ? cb(user) : user;
            })
            .catch(function(res){
                throw "LoginError";
            });

};
我试着用jasmine来测试它是否抛出错误,就像这样:

expect(function(){
  scope.login();
}).toThrow();
但会抛出此错误:

预期函数将引发异常

我已经测试了承诺的可接受性,它按预期工作,但我假设存在一些我无法处理的异步方面

我还试着调用passing in和call done(),但这也不起作用

编辑:

我在模仿我的后端,就像这样:

beforeEach(inject(function($rootScope,$controller,_$httpBackend_){



            $httpBackend = _$httpBackend_;
            successCallback = jasmine.createSpy();
            errorCallback = jasmine.createSpy();


            scope = $rootScope.$new();
            controller = $controller('LoginController',{
                '$scope':scope
            });

        }));

afterEach(function(){
            $httpBackend.verifyNoOutstandingExpectation();
            $httpBackend.verifyNoOutstandingRequest();
        });

请注意,我的其他测试确实有效,我也尝试过其他场景,其中服务器返回200,一个用户,一切正常。我专门测试$scope.login()在收到服务器错误时是否抛出错误

您需要设置$httpBackend以模拟资源的响应。 然后,您需要刷新这些结果,以便可以控制它们何时解析

我为您在plunker上提供了一个场景的快速示例

相关的规范文件。

片段概览:

$httpBackend.expectGET('/api/index.php/user')
                .respond(500, 'error');
//Initiate request by calling your api/resource
$httpBackend.flush();