Jasmine spyOn函数不是对象的方法

时间:2016-09-02 18:36:42

标签: angularjs unit-testing jasmine

如何监视不是对象方法的函数。在我的情况下,callMe也不在window对象上 - 它是通过angular加载的依赖项。

if (X) {
  callMe('hello');
}

2 个答案:

答案 0 :(得分:0)

您可以使用jasmine.createSpy方法创建间谍对象。鉴于间谍对象是常规JavaScript对象,您可以使用此间谍对象覆盖您的callMe函数,以便监视它。

function callMe() {
    // implementation
}

describe('an example block', function() {
    it('creates a spy', function() {
        callMe = jasmine.createSpy('callMe');
        callMe();
        expect(callMe).toHaveBeenCalled();
    });
});

来自Jasmine 2.5 documentation

  

如果没有窥探功能,jasmine.createSpy可以创建一个“裸”间谍。这个间谍扮演任何其他间谍 - 跟踪调用,参数等等。但它背后没有实现。间谍是JavaScript对象,可以这样使用。

答案 1 :(得分:0)

您可以创建一个间谍并将其传递给您的控制器。请检查以下代码:

<script type="text/javascript" src="js/d3.v3.min.js"></script>

这基本上会替换你注入控制器的callMe对象。