2017-09-03 4 views
1

現在、私が構築したクラスで特定のメソッドを呼び出せるかどうかをテストしようとしています。試行錯誤の末、私はそれを正しくクラスに接続するために取得することができたが、今、私はこのエラーを取得しています:Jasmine spyOnメソッド呼び出しの中で適切なスコープを設定する方法は?

「エラー:のsayHello(用時にスパイするためにオブジェクトを見つけることができませんでした)」

後私はこれをスコープの問題と考えています。私は、spyOnの呼び出しでbookTitlesを削除し、fakeTitle(およびその対応する部分)にプロトタイプを追加したり、メインのJSファイルのクラス内のメソッド宣言を使いこなしたりすることを試みました。それらの試みのどれもはうまくいきませんでした(実際には半分の時間で実際にリンクが壊れました)。 spyOnメソッドがsayHello()を認識できないのはなぜですか?ここで

は私のコードです:

class bookTitle { 
    helloSomeone(toGreet) { 
     return this.sayHello() + ' ' + toGreet; 
    } 

    sayHello() { 
     return 'Hello'; 
    } 
} 

module.exports = { 
    bookTitle 
} 

と私のジャスミンファイル:

var bookTitles = require ('./bookTitles.js'); 

describe('bookTitle', function() { 
    it('calls the sayHello() function', function() { 
     var fakeTitle = new bookTitles.bookTitle(); 
     spyOn(bookTitles.fakeTitle, 'sayHello'); 
     bookTitles.fakeTitle.helloSomeone('world'); 
     expect(bookTitles.fakeTitle.sayHello).toHaveBeenCalled(); 
    }); 
}); 

またサイド質問、私は私がなぜfakeTitleオブジェクトは、その後bookTitleでクラスの一部であると言っていた場合spyOnメソッド内でbookTitlesを宣言する必要がありますか?私の思考プロセスは、要求されたファイルのクラス内の新しいオブジェクトを言うことによって、呼び出しが行われる場所を自動的に仮定するメソッド呼び出しをしてはいけませんか?

答えて

1

あなたが作成したオブジェクトをスパイする必要があります。

describe('bookTitle', function() { 
    it('calls the sayHello() function', function() { 
     var fakeTitle = new bookTitles.bookTitle(); 
     spyOn(fakeTitle, 'sayHello'); 
     fakeTitle.helloSomeone('world'); 
     expect(fakeTitle.sayHello).toHaveBeenCalled(); 
    }); 
}) 
+0

私が見る、私は概念的にはどのようにspyOn機能を誤解されました。この回答は同時に、私の側面の質問にも答えます、助けてくれてありがとう! – mcrav95