2017-05-16 24 views
0

私は、ジャスミンを角度で使って単体テストで新しいです。角度単位spyOn()。and.callthroughが実際の関数を呼び出さない

私は現在、loadSomething(id)という機能を持つサービスをテストしており、その中にconsole.infoを追加しました。

MYサービス:

function loadSomething(id) 
{ 
    console.info('this is a test message'); 
    return (a promise from a POST request) 
} 

そして、これは私のテスト(スペック)ファイルです:

//verify that the load function exists 
it('load snapshot',function(){ 

    expect(MyService.loadSomething(108)); //statement 1 
    spyOn(MyService, 'loadSomething').and.callThrough(); //statement 2 
}); 

だから、私はSpyOnのcallthrough方法は、実際の関数を呼び出すことをオンラインで読みます。 しかし、expect文(文1)を使ってテストを実行すると、console.infoメッセージが呼び出されます(正常に動作します)。一方、文1をコメントアウトしてSpyOn(文2)のコメントを外すと、console.infoメッセージは表示されなくなりました。

私はまったく逆のことが起こると思います。 私はここで間違ったことを理解しましたか?

(コードの残りの部分はspecファイルと実際のサービスの両方、正常に動作し、私は本当にこの特定の事を得ることはありません)

は助けを事前にありがとうございます。

答えて

0

SpyOnは、テスト時に関数がどのように反応するかを設定するのに役立ちます。基本的にジャスミンのモックを作成する方法です。

場合によっては、サービス機能が呼び出されているときのテスト(callThrough)を定義しています。 問題は、あなたも

it('load snapshot',function(){ 

    //setup 
    spyOn(MyService, 'loadSomething').and.callThrough(); //statement 2 

    //act 

    //either call the scope function which uses the service 
    //$scope.yourServiceCallFunction(); 

    //or call the service function directly 
    MyService.loadSomething(1); //this will callThrough 

}); 

をcallThroughなるSpyOnをトリガするため にサービス機能(またはあなたのサービスメソッドを呼び出すスコープ機能)に作用する必要があることをここでは、モックます簡単なテストがありますされます文字列へのSpyOnの応答

it('test loadSomething',function(){ 

    //setup 
    spyOn(MyService, 'loadSomething').and.returnValue('Mocked'); 

    //act 
    var val = MyService.loadSomething(1); 

    //check 
    expect(val).toEqual('Mocked'); 
}); 
関連する問題