2013-06-15 15 views
8

私のサービスオブジェクトは、次のようになりますどのように私はそれをやって行くだろうジャスミンのスパイが

expect(appService.serviceTwo.query).toHaveBeenCalled(); 

var appService = { 
serviceOne: { 
    get: function(){} 
}, 
serviceTwo: { 
    query: function(){} 
} 
} 

私は、appServiceを嘲笑するようなものをご希望ですか?

+0

回答を受け入れる必要があります。ここに2つの仕事があります – jolySoft

答えて

7

OK私はこれで作業これを得た:

appService: { 
    serviceOne: jasmine.createSpyObj('serviceOne', ['get']), 
    serviceTwo: jasmine.createSpyObj('serviceTwo', ['query']) 
} 

私はそれを行うための正しい方法であると思います。

+1

これは最適なアプローチです。その中で、 '' get''と '' query''はどちらもスパイメソッドです。したがって、 'expect(appService.serviceTwo.query).toHaveBeenCalled()'のようなものが利用可能です。 – acdcjunior

6

ただ、ジャスミンのスパイとの機能を置き換える:

var appService = { 
    serviceOne: { 
    get: jasmine.createSpy() 
    }, 
    serviceTwo: { 
    query: jasmine.createSpy() 
    } 
} 

後で:

expect(appService.serviceTwo.query).toHaveBeenCalled() 
+1

これを実行する代わりに 'spyOn'を実行したい場合はどうすればいいのですか? –

2

私は非常に同様の問題に遭遇し、比較的容易に複数のレベルでスパイ活動を可能にする作業を解決しました。

appService = { 
    serviceOne: jasmine.createSpy().and.returnValue({ 
    get: jasmine.createSpy() 
    }, 
    serviceTwo: jasmine.createSpy().and.returnValue({ 
    query: jasmine.createSpy() 
    } 
} 

このソリューションは、以下のコードは、ユニットテストで呼び出されることを可能にする

expect(appService.serviceOne).toHaveBeenCalledWith('foobar'); 
expect(appService.serviceOne().get).toHaveBeenCalledWith('some', 'params'); 

注:このコードはテストされていません。しかし、私は自分のアプリの中で非常にsimmilarな実装をしています。お役に立てれば!

関連する問題