2017-10-15 19 views
1

ローカルメソッド(メソッド1)が別のメソッド(メソッド2)から呼び出されているかどうかをテストしようとしています。私はこのようなものを試しましたが、method1()は依然としての元の定義を持っています。Jasmineを使用して、ローカルメソッドが呼び出されたかどうかをチェックする方法?

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

テストケース:任意の成功なしにmethod1に上書きしようとしました

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

:あなたは新しいにClassA(呼び出すとき

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

コードはOKですが、 'spyOn(objectA、 'method1')。andCallThrough;'行に '()'がありません。 –

答えて

0

を)あなたがにClassAを呼び出すコードスニペットは、このようになります関連するプロトタイプで新しいオブジェクトを取得します。これは、あなたがspyOn(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(); 
}); 

: あなたのような何かを行うことができるはず。

+0

Apurva、お返事ありがとうございます。 それはあなたのために働くのですか? method2()はspiedObjまたはoriginalConstructorから呼び出されますか? – ambar

関連する問題