使用Jasmine如何检查是否已调用本地方法?

时间:2017-10-15 11:50:27

标签: javascript unit-testing jasmine karma-jasmine

我正在尝试测试是否从另一个方法( method2 )调用本地方法( method1 )。我试过这样的东西,但它不起作用,因为method1()仍然有原始定义。代码段如下所示:

var ClassA = function () {
    var method1 = function () {
        console.log('method1');
    };
    var method2 = function () {
        method1();
    };
    return {method1: method1, method2: method2}
}

测试用例:

it("should call method1 when method2 is called", function () {
    var objectA = new ClassA();
    spyOn(objectA, 'method1').andCallThrough;
    objectA.method2();
    expect(objectA, 'method1').toHaveBeenCalled();
});

尝试覆盖方法1而没有任何成功:

objectA.method1 = jasmine.createSpy('aSpy').andCallThrough();

1 个答案:

答案 0 :(得分:0)

当您调用新的ClassA()时,您将调用ClassA函数并获取具有相关原型的新对象。这意味着,当您窥探(ClassA," doSomething")时,您不会在新调用返回的对象上设置间谍,而是在ClassA函数本身上可能的doSomething函数上设置间谍。 您应该可以执行以下操作:

it("calls method1", function() {
  var originalConstructor = ClassA,
      spiedObj;
  spyOn(window, 'ClassA').and.callFake(function() {
    spiedObj = new originalConstructor();
    spyOn(spiedObj, 'method1');
    return spiedObj;
  });
  method2();
  expect(spiedObj.method1).toHaveBeenCalled();
});

如果不能我们讨论更多内容,请告诉我。