无法在方法上创建间谍

时间:2017-06-28 06:33:30

标签: angular testing

我的服务是

var testappserviceone = angular.module('testappserviceonemodule',[])

testappserviceone.factory('testappServiceone',[function(){
    return function (x,y) {

        function addobj (x,y){
            return x+y;
        }

        return{
            add:addobj
        }
    }
}]);

我的测试套件是

describe('testappserviceone add method functionality', function(){

    beforeEach(function () {
        spyOn(testappServiceone(10,15),'add').and.callThrough();
    });

    it('testappServiceone add method functionality', function() {
        testappServiceone(10,15).add();
        expect(testappServiceone(10,15).add).toHaveBeenCalled();
    });

});

我得到的例外是

期待间谍,但得到了功能。

我认为spy()并没有创造间谍。请帮助我理解和解决这个问题。

1 个答案:

答案 0 :(得分:0)

每次当我们评估这个表达式/调用函数时,它都会在属性add

中返回带有新函数的新对象
testappServiceone(10,15) // -> Object A
testappServiceone(10,15) // -> Object A'
// A !== A'

在这种情况下,我应该写这样的东西

var foo = testappServiceone(10,15);
spyOn(foo, 'add');
foo.add()

expect(foo.add).toHaveBeenCalled()

参考:https://github.com/karma-runner/karma/issues/2751