Вот рабочий пример для начала:
StudentInfo.js
import * as StudentInfo from './StudentInfo';
export async function getData() {
throw new Error('should not get here'); // <= getData will be mocked
}
export async function filterStudents() {
const studentData = await StudentInfo.getData();
return studentData.filter(v => v.id === '2');
}
StudentInfo.test.js
import * as StudentInfo from "./StudentInfo"
describe("StudentInfo", () => {
test("student data correctly filtered", async () => {
const studentData = [
{ name: 'student1', id: '1' },
{ name: 'student2', id: '2' },
{ name: 'student3', id: '3' }
];
jest.spyOn(StudentInfo, "getData").mockResolvedValue(studentData);
await expect(StudentInfo.filterStudents()).resolves.toEqual([{ name: 'student2', id: '2' }]); // Success!
});
});
Вы можете использовать mockFn.mockResolvedValue
, чтобы смоделировать возвращаемое значение как Promise
, которое преобразуется в значение, которое вы передаете ему (хотя это также работает нормально, если вы просто используете mockFn.mockReturnValue
, так как оно действительно длявызовите await
для значения, например const five = await 5; // <= works fine
).
Важной частью является использование .resolves
, чтобы сообщить Jest
, что ожидаемое значение равно Promise
что вы ожидаете разрешить, а затем соедините toEqual
для подтверждения ожидаемого разрешенного значения.