私のサービスオブジェクトは次のようになります。
var appService = {
serviceOne: {
get: function(){}
},
serviceTwo: {
query: function(){}
}
}
次のような appService をモックしたいと思います。
expect(appService.serviceTwo.query).toHaveBeenCalled();
どうすればそれを行うことができますか?
私のサービスオブジェクトは次のようになります。
var appService = {
serviceOne: {
get: function(){}
},
serviceTwo: {
query: function(){}
}
}
次のような appService をモックしたいと思います。
expect(appService.serviceTwo.query).toHaveBeenCalled();
どうすればそれを行うことができますか?
OK私はこれでこれを機能させました:
appService: {
serviceOne: jasmine.createSpyObj('serviceOne', ['get']),
serviceTwo: jasmine.createSpyObj('serviceTwo', ['query'])
}
それが正しい方法であることを願っています。
関数を jasmine spies に置き換えるだけです。
var appService = {
serviceOne: {
get: jasmine.createSpy()
},
serviceTwo: {
query: jasmine.createSpy()
}
}
後で:
expect(appService.serviceTwo.query).toHaveBeenCalled()
私は非常によく似た問題に遭遇し、複数のレベルで比較的簡単にスパイできる解決策を見つけました。
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');
注: このコードはテストされていません。ただし、私のアプリの 1 つに非常に似た実装があります。お役に立てれば!