如何在 karma unittest 上调用其他方法?

how to call other method on karma unittest?

假设我有这样的服务:

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' is not a function (evaluating 'this.addClaimitem(

我如何模拟或修复我在同一服务上调用另一个方法的测试?

我唯一想测试的是 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);        
});