如何测试angularjs服务中的函数

时间:2016-08-23 08:57:19

标签: javascript angularjs unit-testing jasmine karma-jasmine

这是我处理应用程序导航的简单服务。 如果用户点击" next"根据目前的状态,他将被重定向到下一页。

'use strict';

angular
.module('myAngularmodule')
.service('ButtonBarService',
function ($state, StatesConstants) {

    return {
        next: next
    };

    function next() {
        switch ($state.current.name) {
            case StatesConstants.LICENSE :
                $state.go(StatesConstants.APPLICATIONGROUP);
                break;
            case StatesConstants.APPLICATIONGROUP :
                $state.go(StatesConstants.ANALYSIS);
                break;
            default:
                break;
        }
    }


});

这是我的spec文件,当我尝试测试失败时

'use strict';

describe('ButtonBarService', function () {

beforeEach(module('myAngularmodule'));
var ButtonBarService;

beforeEach(inject(function (_ButtonBarService_) {
    ButtonBarService = _ButtonBarService_;

    spyOn(ButtonBarService, 'next');

}));

describe('next()', function () {

    it('should retrieve the current user', function () {
        expect(ButtonBarService.next).toHaveBeenCalled();
    });

});

});

它没有说"旁边的预期间谍已被召唤。" 在这个服务中没有后端的东西,我只是将它概括为处理buttonbar的东西。 我对前端很新。我看到的答案有$ http,但无法理解。

1 个答案:

答案 0 :(得分:0)

尝试(编写ES6语法):

spyOn(ButtonBarService, 'next').and.callFake(() => true);

然后你的期望应该有效,我想。