单元测试中的AngularJS + Jasmine .then语句

时间:2015-07-13 19:57:12

标签: angularjs unit-testing karma-jasmine

所以我的单元测试摘录如下。以下运行正常,但不会发生console.log语句。此外,服务中的console.log语句也不会发生。我已经尝试在它的末尾添加.error位,但这绝对没有区别。我想得到我的LoginService.refreshToken()。然后函数才能正常工作。

it('refreshToken Executes Properly', inject(function (LoginService, $httpBackend, localStorageService) {
    var dummyToken = {""};
    localStorageService.set('token', dummyToken);
    $httpBackend.expect('POST', 'URL', data2, {
                headers: {
                    "Content-Type": "",
                    "Accept": "",
    "Authorization": ""
                }
            }).respond(200, {success:true});
    //nothing inside the below function does anything??
    LoginService.refreshToken().then(function(response) {
        console.log("Ran");
        expect(response.data.success).toBe(true);
    });
}));

这是我的服务

refreshToken: function(refreshCallback) {
        var baseURL = sharedProperties.getBaseURL();
        var token = localStorageService.get('token');
        if (token && token.refresh_token) {
            var data = "";
            return $http.post(URL, data, {
                headers: {
                    "Content-Type": "",
                    "Accept": "",
                    "Authorization": "")
                }
            }).success(function(response) {
                var expiredAt = new Date();
                console.log("Attempt A");
                expiredAt.setSeconds(expiredAt.getSeconds() + response.expires_in);
                response.expires_at = expiredAt.getTime();
                localStorageService.set('token', response);
                if (refreshCallback) {
                    refreshCallback();
                }
                return response;
            });
        }
    }

我原本以为我的if语句不满意,但我检查过,情况并非如此。有些东西根本无法正常工作,我不知道是什么。我有一个几乎相同的函数,以及一个测试,它可以做我想要的工作.then语句。我在下面发布了它。我不明白我的两个功能有什么不同,其中一个有效,另一个没有。

initiateRequest: function (username, password) {   
        var baseURL = sharedProperties.getBaseURL();
        var data = ""; 
        $http.defaults.headers.post['Content-Type'] = '';
        $http.defaults.headers.post['Accept'] = '';
        $http.defaults.headers.post['Authorization'] = "";
        return $http.post(URL, data, {}).success(function(response) {
            var expiredAt = new Date();
            expiredAt.setSeconds(expiredAt.getSeconds() + response.expires_in);
            response.expires_at = expiredAt.getTime();
            localStorageService.set('token', response);
            $http.defaults.headers.post['Content-Type'] = undefined;
            $http.defaults.headers.post['Accept'] = undefined;
            $http.defaults.headers.post['Authorization'] = undefined;
            return response;
        })



it('Login Execute Properly', inject(function (LoginService, $httpBackend, localStorageService) {
    $httpBackend.expect('POST', URL, data, {
    "Content-Type": "",
    "Accept": "",
    "Authorization": ""
    }).respond(200, {success: true});
    LoginService.initiateRequest("", "").then(function(response) {
        expect(response.data.success).toBe(true);
        testToken = response;
    });
    var testToken = localStorageService.get('token');
    $httpBackend.flush();
}));

1 个答案:

答案 0 :(得分:0)

您需要在单元测试中运行 $ rootScope。$ apply ,告诉测试运行员解决(e.i. apply)所有承诺。

相关问题