Angularjs 角度/茉莉花/承诺/模拟测试

Angularjs 角度/茉莉花/承诺/模拟测试,angularjs,jasmine,promise,Angularjs,Jasmine,Promise,我对角度/茉莉花/承诺/模仿测试有点搞砸了 我有一段代码: factory.login = function(user, pwd) { AuthenticationResource.login( {}, {"username" : user, "password" : pwd}, factory.onLoginSuccess, factory.onLoginFailure ); }; 然后我试着写一个测试: it('login', funct

我对角度/茉莉花/承诺/模仿测试有点搞砸了

我有一段代码:

factory.login = function(user, pwd) {
    AuthenticationResource.login( {}, {"username" : user, "password" : pwd},
        factory.onLoginSuccess,
        factory.onLoginFailure
    );
};
然后我试着写一个测试:

  it('login', function() {

        // give
        // 1. make 'authenticationResource.login' return a promise that will be successfully resolved
        var deferred = $q.defer();
        var promise = defered.promise;

        authenticationResource.login = function() {
            //deferred.resolve(loginResponse);
            return deferred.promise;
        };

        // 2. call 'factory.login' and make sure that 'onLoginSuccess' function was invoked as expected

        // then
        //expect(..
    });
你能给我指一下正确的方向吗。似乎所有这些看起来都与我使用Java/Mockito所做的有些不同。

然后,
AuthenticationResource
本身就在这里:

angular.module('main.resources').factory('AuthenticationResource', ['$resource', function ($resource) {
    return $resource('/rest/authenticate/:path',
        {path: "@path"}, //parameters default
        {
            login:  { method: "POST", params: { path: "login" } },
            logout: { method: "POST", params: { path: "logout" } }
        });
}]);
检查我的答案


在你看到光明之前,嘲弄承诺是很困难的

我知道这是一个老问题,但万一有人偶然发现,我写信是为了帮助解决这个问题

使用它,您可以简单地测试承诺,如:

expect(promise).toBeRejected();
expect(promise).toBeRejectedWith('expected error message');
expect(promise).toBeResolved();
expect(promise).toBeResolvedWith('expected result data');

可能是我计划使用它的副本。很高兴听到。:)如果它缺少你想要的功能,请告诉我。