Пока что нет способа jestjs
сделать это. Вот предложение: Параметризованные возвращаемые значения макета
Вот решения:
- Использование
sinon.js
sinon.js
поддержка макета возвращаемого значения на основе аргументов, есть метод с именем stub.withArgs(arg1[, arg2, ...]);
Используйте jest-when - A когда (fn) .calledWith (args) .thenReturn (значение) lib для jest
Если вы настаиваете при использовании jestjs
, поскольку mockReturnValueOnce
возвращает значения последовательно (первый вызов, второй вызов и т. д. c.). Вы можете использовать следующий способ:
index.js
:
import axios from 'axios';
export async function main() {
const numbersRes = await axios.get('api/numbers');
const lettersRes = await axios.get('api/letters');
return { numbersRes, lettersRes };
}
index.test.js
:
import { main } from '.';
import axios from 'axios';
describe('59751925', () => {
it('should pass', async () => {
const mockGet = jest.spyOn(axios, 'get');
mockGet.mockImplementation((url) => {
switch (url) {
case 'api/numbers':
return Promise.resolve({ data: 1 });
case 'api/letters':
return Promise.resolve({ data: 'a' });
}
});
const actual = await main();
expect(actual.numbersRes).toEqual({ data: 1 });
expect(actual.lettersRes).toEqual({ data: 'a' });
});
});
Результаты модульного теста:
PASS src/stackoverflow/59751925/index.test.js (11.168s)
59751925
✓ should pass (9ms)
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 13.098s