[javascript] Jasmine 스파이에서 여러 호출에 대해 서로 다른 반환 값을 갖는 방법

다음과 같은 방법을 염탐한다고 가정 해 보겠습니다.

spyOn(util, "foo").andReturn(true);

테스트중인 함수가 util.foo여러 번 호출 됩니다.

스파이 true가 처음 호출 될 때 반환 false되고 두 번째로 반환 되도록 할 수 있습니까? 아니면 이것에 대해 다른 방법이 있습니까?



답변

spy.and.returnValues (Jasmine 2.4)를 사용할 수 있습니다 .

예를 들면

describe("A spy, when configured to fake a series of return values", function() {
  beforeEach(function() {
    spyOn(util, "foo").and.returnValues(true, false);
  });

  it("when called multiple times returns the requested values in order", function() {
    expect(util.foo()).toBeTruthy();
    expect(util.foo()).toBeFalsy();
    expect(util.foo()).toBeUndefined();
  });
});

당신이주의해야합니다 몇 가지 일이있다, 또 다른 기능은 비슷한 마법을 것이 returnValue없이 s당신이 그것을 사용하는 경우, 자스민 당신을 경고하지 않습니다.


답변

이전 버전의 Jasmine의 경우 spy.andCallFakeJasmine 1.3 또는 spy.and.callFakeJasmine 2.0에 사용할 수 있으며 간단한 클로저 또는 개체 속성 등을 통해 ‘호출’상태를 추적해야합니다.

var alreadyCalled = false;
spyOn(util, "foo").andCallFake(function() {
    if (alreadyCalled) return false;
    alreadyCalled = true;
    return true;
});


답변