sinon stub withArgs가 일부 인수와 일치하지만 모든 인수와 일치 할 수 있습니까?
여러 인수로 호출되는 스터 빙 함수가 있습니다. 첫 번째 인수 만 확인하고 싶습니다 . 나머지는 콜백 함수이므로 그대로두고 싶습니다. 따라서 예를 들어 ajax를 사용하여 다음 두 가지 호출이있을 수 있습니다.
method.get = sinon.stub();
method.get(25,function(){/* success callback */},function(){/* error callback */});
method.get(10,function(){/* success callback */},function(){/* error callback */});
나는 method.get.calls...
첫 번째 get(25)
와 두 번째를 구별하지 않기 때문에 사용할 수 없습니다 get(10)
. 그러나 내가 사용하면 모든 인수 와 일치 method.get.withArgs(25).calls...
하기 때문에 withArgs()
일치 하지 않습니다 (그런 콜백으로 절대 불가능).
첫 번째 인수를 기반으로 응답을 확인하고 설정하기 위해 sinon 스텁을 얻는 방법은 무엇입니까?
https://sinonjs.org/releases/latest/matchers/#sinonmatchany
sinon.match.any를 사용할 수 있습니다.
method.get.withArgs(25, sinon.match.any, sinon.match.any);
첫 번째 인수 만 확인하려면 다음을 사용할 수 있습니다.
method.get.withArgs(25).calledOnce
또는
method.get.calledWith(25)
이 방법은 여러 인수 중 하나만 확인하려는 경우 스파이와 매우 잘 작동합니다.
it('should check only first argument', function ():void {
myFunction('foo', 'bar', baz');
expect(myFunctionSpy.firstCall.args[0]).to.equal('foo');
});
그러나 여기서 스텁을 사용하는 이유를 이해하지 못합니다. 함수가 어떻게 호출되는지 확인하려면 스파이를 사용해야합니다. 호출 방법을 확인하고 동작을 변경하려면 (예 : ajax 호출 차단) mock을 사용해야합니다.
Sinon mock은 자신 만의 방식으로 물건을 확인합니다. 내가 당신의 경우를 아는 유일한 방법은 확인하고 싶지 않은 인수에 대해 sinon.match.many를 사용하는 것입니다.
it('should check only first argument', async function (): Promise<void> {
mock.expects('myFunction').withExactArgs('foo', sinon.match.any, sinon.match.any).returns('foo');
await myFunction('foo', 'bar', baz');
mock.verify();
});
mock.verify ()는 테스트를 진행하고 다른 테스트를 위해 모의를 재설정합니다. 스파이 또는 스텁을 사용하는 경우 각 테스트 후 restore () 또는 reset ()을 사용하여 수동으로 수행해야합니다.
PD : TypeScript 구문에 대해 죄송합니다.
해결책
withArgs
모든 인수가 아닌 일부를 일치시키는 데 사용할 수 있습니다.
특히, method.get.withArgs(25)
것입니다 확인 단지 첫 번째 인수를 .
보정
이것은 올바르지 않습니다.
withArgs()
모든 인수 와 일치
세부
경우 withArgs
라고 그것이 전달 된 인수 기억 여기 로를 matchingArguments
.
그런 다음 stub
이 호출되면 여기에서 일치하는 모든 가짜를 가져 옵니다 .
matchingFakes
두 번째 매개 변수없이 호출되므로 색인 0에서 시작하여 길이까지 matchingArguments
전달 된 인수와 일치하는stub
matchingArguments
모든 가짜를 반환합니다 . 즉, 추가 인수가 있어도matchingArguments
전달 된 인수의 시작 부분과 일치 할 때 가짜가 일치 합니다.
그런 다음 일치하는 모든 가짜가 정렬되고matchingArguments.length
가장 많은 인수와 일치하는 것이 호출됩니다 .
다음 시험이 동작을 확인하고 함께 전달 sinon
버전 1.1.0
칠년 전의 버전 1.14.0
때부터이 질문은 질문하고, 현재 버전되었다 6.3.5
:
import * as sinon from 'sinon';
test('withArgs', () => {
const stub = sinon.stub();
stub.withArgs(25).returns('first arg is 25!');
stub.returns('default response');
expect(stub(25)).toBe('first arg is 25!'); // SUCCESS
expect(stub(25, function () { }, function () { })).toBe('first arg is 25!'); // SUCCESS
expect(stub(10, function () { }, function () { })).toBe('default response'); // SUCCESS
});
'UFO ET IT' 카테고리의 다른 글
Bootstrap 3 및 Boostrap 4-input-xs (sm보다 작음) (0) | 2021.01.07 |
---|---|
멀티 인덱스를 사용한 판다 플로팅 (0) | 2021.01.07 |
재현 가능한 Apache Spark 예제를 만드는 방법 (0) | 2021.01.07 |
Python Tkinter 루트 창을 어떻게 제거합니까? (0) | 2021.01.07 |
VIM에서 특정 탭으로 전환 (0) | 2021.01.07 |