我怎样才能测试另一个函数内的函数是否被调用?

时间:2017-11-14 14:12:37

标签: javascript unit-testing jasmine

我怎样才能测试另一个函数内的函数是否被调用?我无法更改源代码,因此我需要按原样进行测试。

我该怎么做?这是我的代码:

function B(){ console.log('function b'); }

function A(){
    B();
}  

茉莉花测试:

it('should check function B in function A was called', function () {
    spyOn(window, 'B');
    A();
    expect(B).toHaveBeenCalled();
});

1 个答案:

答案 0 :(得分:0)

  

间谍

     

Jasmine有一个称为间谍的测试双重功能。间谍可以存根   函数和跟踪对它的调用和所有参数。间谍只存在   在描述或它定义的块中,将是   每个规格后删除。有特殊的相互作用匹配器   与间谍。 Jasmine 2.0的语法已更改。该   如果调用间谍,toHaveBeenCalled匹配器将返回true。该   toHaveBeenCalledWith匹配器将返回true参数列表   匹配任何记录的间谍呼叫。

 describe("A spy", function() {
  var foo, bar = null;

  beforeEach(function() {
    foo = {
      setBar: function(value) {
        bar = value;
      }
    };

    spyOn(foo, 'setBar');

    foo.setBar(123);
    foo.setBar(456, 'another param');
  });

  it("tracks that the spy was called", function() {
    expect(foo.setBar).toHaveBeenCalled();
  });

  it("tracks all the arguments of its calls", function() {
    expect(foo.setBar).toHaveBeenCalledWith(123);
    expect(foo.setBar).toHaveBeenCalledWith(456, 'another param');
  });

  it("stops all execution on a function", function() {
    expect(bar).toBeNull();
  });
});