【问题标题】:How to mock $cookiestore.put in AngularJS/Jasmine如何在 AngularJS/Jasmine 中模拟 $cookiestore.put
【发布时间】:2017-02-01 14:29:04
【问题描述】:

我想测试我的 Authentication.Login 服务功能。

在这个服务中调用另一个服务和一个 cookiestore.put 方法。

我想模拟这两个函数。但我仍然得到一个错误:/

我用 Jasmine 中的 spyon 功能尝试过,但它不起作用:

spyOn('base64', 'encode').and.returnValue(username + ';' + password);
spyOn('cookie', 'put').and.returnValue(username);

谁能帮帮我?

这是身份验证服务:

function (Base64, $http, $cookieStore, $rootScope, $q) {
        //initialize service
        var service = {};

        service.Login = function (username, password) {
            //initialize promise object for asynchron behavior of the data 
            var deferred = $q.defer();

            var authdata = Base64.encode(username + ':' + password);

            //put login data in global variable to access in the root scope
            $rootScope.globals = {
                currentUser: {
                    username: username,
                    authdata: authdata
                }
            };

            //put base64 data in header
            $http.defaults.headers.common['Authorization'] = 'Basic ' + authdata;
            //put login data in cookie to keep user logged in, if he refresh the page
            $cookieStore.put('globals', $rootScope.globals);

【问题讨论】:

    标签: angularjs unit-testing jasmine


    【解决方案1】:

    使用$provide覆盖服务:

    var cookieStoreMock = {
      put: function() {
        return username;
      }
    }
    
    module(function($provide) {
      $provide.value('$cookieStore', cookieStoreMock);
    });
    
    describe(...
    

    【讨论】:

    • 谢谢!我明天试试,然后通知你:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-20
    • 1970-01-01
    • 2017-09-04
    • 2016-02-26
    • 2013-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多