【问题标题】:Angular / jasmine / promise / mocking testingAngular / jasmine / promise / 模拟测试
【发布时间】:2014-11-04 21:05:59
【问题描述】:

我对 angular / jasmine / promise / mocking 测试有点搞砸了。

我有一段代码:

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" } }
        });
}]);

【问题讨论】:

标签: angularjs jasmine promise


【解决方案1】:

查看我的答案here

在你看到光明之前,很难模拟承诺!

【讨论】:

    【解决方案2】:

    老问题,我知道,但万一其他人偶然发现它 - 我写了 jasmine-promise-matchers 来帮助解决这个问题。

    有了它,你可以简单地测试 Promise,比如:

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

    【讨论】:

    • 我本来打算用它的。
    • 很高兴听到。 :) 如果它缺少您想要的任何功能,请告诉我。
    猜你喜欢
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    • 1970-01-01
    • 2014-11-22
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    • 2015-07-07
    相关资源
    最近更新 更多