[Javascript] 引数に基づいてジャスミンのスパイを変更する方法はありますか?



Answers

また、 $provideを使ってスパイを作成$provideこともできます。 また、 and.returnValues代わりにand.returnValueを使用して、パラメータ化されたデータを渡すこともできます。

Jasmineのドキュメントに従って:スパイをand.returnValuesで連鎖することにより、関数へのすべての呼び出しは、戻り値リストの最後に到達するまで順番に特定の値を返します。この時点で、それ以降のすべての呼び出しでundefinedが返されます。

describe('my fn', () => {
    beforeEach(module($provide => {
        $provide.value('externalApi', jasmine.createSpyObj('externalApi', ['get']));
    }));

        it('get userName and Id', inject((externalApi) => {
            // Given
            externalApi.get.and.returnValues('abc','123');

            // When
            //insert your condition

            // Then
            // insert the expectation                
        }));
});
Question

私は別のパラメータを使用して、外部APIメソッドを2回呼び出すテストしたい関数を持っています。 私はこの外部APIをジャスミンスパイと嘲笑して、パラメータに基づいて異なるものを返すようにしたいと思います。 ジャスミンでこれを行う方法はありますか? 私が思いつくのは、andCallFakeを使ったハックです:

var functionToTest = function() {
  var userName = externalApi.get('abc');
  var userId = externalApi.get('123');
};


describe('my fn', function() {
  it('gets user name and ID', function() {
    spyOn(externalApi, 'get').andCallFake(function(myParam) {
      if (myParam == 'abc') {
        return 'Jane';
      } else if (myParam == '123') {
        return 98765;
      }
    });
  });
});



Links