我正在尝试测试一个使用另一个异步函数返回的数据的异步函数。这是解释我的问题的代码:
StudentInfo.js
export async function getData() {
//studentData imported from another file
return new Promise(resolve => {
setTimeout(() => {
resolve(studentData);
}, 5000);
});
}
export async function filterStudents() {
const studentData = await StudentInfo.getData();
//computations
return filteredData; //object
}
StudentInfo.test.js
import * as studentInfo from "src/StudentInfo.js"
describe("StudentInfo" , () => {
test("student data correctly filtered", async () => {
const studentData = [
{
name: Sarah Marshall,
id: srhmar451
},
{...}
];
expectedData = { [...], [...]};
const spy = jest.spyOn(studentInfo, "getData");
spy.mockReturnValue(studentData);
await expect(studentInfo.filterStudents()).toEqual(expectedData);
});
});
我的测试失败,因为预期返回值是Promise {}
。有人可以帮我写一个测试吗filterStudents()
功能?我已经被这个问题困扰太久了。
这是一个帮助您入门的工作示例:
学生信息.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 https://jestjs.io/docs/en/mock-function-api#mockfnmockresolvedvaluevalue将返回值模拟为Promise
解析为您传递给它的值(尽管如果您只使用它也可以正常工作)mockFn.mockReturnValue https://jestjs.io/docs/en/mock-function-api#mockfnmockreturnvaluevalue因为调用是有效的await
一个值,例如const five = await 5; // <= works fine
).
重要的部分是使用.resolves https://jestjs.io/docs/en/expect#resolves告诉Jest
期望值是Promise
您期望解决的问题,然后链接toEqual
断言预期的解析值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)