11

私のサービスオブジェクトは次のようになります。

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

次のような appService をモックしたいと思います。

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

どうすればそれを行うことができますか?

4

4 に答える 4

16

OK私はこれでこれを機能させました:

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

それが正しい方法であることを願っています。

于 2013-06-15T07:12:42.427 に答える
6

関数を jasmine spies に置き換えるだけです。

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

後で:

expect(appService.serviceTwo.query).toHaveBeenCalled()
于 2013-06-15T08:54:25.440 に答える
3

私は非常によく似た問題に遭遇し、複数のレベルで比較的簡単にスパイできる解決策を見つけました。

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 つに非常に似た実装があります。お役に立てれば!

于 2016-04-26T18:24:35.920 に答える