如何在业力单元测试中调用其他方法?

时间:2015-11-16 05:28:16

标签: angularjs jasmine karma-runner

假设我有这样的服务:

app.factory('dataService', function () {
    return {
        getData: function (item) {
          var item = addClaimItem(item)  ;
          return true;
        },

        addClaimItem: function (item) {
            return false;
        }
}}

我的测试看起来像这样:

beforeEach(function(){

        inject(function (_dataService_) {
                dataService = _dataService_;
            }
        );


   dataService.addClaimItem = jasmine.createSpy('dataService').and.returnValue(true)


});

it('should find it',function(){
    expect(dataService.getData({})).toBe(false);
});

收到错误:

  

TypeError:'undefined'不是函数(评估'this.addClaimitem(

如何在同一服务上调用另一种方法时,如何模拟或修复此测试?

1 个答案:

答案 0 :(得分:0)

我唯一可以考虑测试的是getData调用addClaimItem。要对此进行测试,您可以spy on addClaimItem。例如

beforeEach(inject(function(_dataService_) {
    dataService = _dataService_;
}));

it('getData calls through to addClaimItem', function() {
    spyOn(dataService, 'addClaimItem');

    var obj = {};

    expect(dataService.getData(obj)).toEqual(true); // it returns true, not false
    expect(dataService.addClaimItem).toHaveBeenCalledWith(obj);        
});