我正在使用Jest对Create React App进行测试,并且试图与同步代码一起测试异步函数,并且当同步部分出现错误时,我需要将其抛出。
测试是在接收错误的参数类型时期望函数抛出。
函数收到除“未定义” (不带参数的函数)或“数字” 以外的参数类型时,该函数抛出“无效参数” 。 >。
USER_API是要调用的API网址。
功能如下:
export const getUsers = async (count, ...rest) => {
if (["undefined", "number"].includes(typeof count) && rest.length === 0) {
const response = await fetch(USERS_API);
const users = await response.json();
if (count && typeof count === "number") {
return users.slice(0, count - 1);
}
return users;
}
throw "Invalid arguments.";
};
这是测试:
it.only("should throw on invalid arguments", () => {
const str = "hello";
expect(() => getUsers(str)).toThrow(/invalid/gi);
});
我扩展了抛出函数
但是运行测试显示: 预期该函数将引发错误匹配:/ invalid / gi,但未引发任何错误。
测试方法正确还是我写的测试不好?如果不好,我该如何改善?
谢谢。
答案 0 :(得分:1)
由于您的getUsers
是async函数,因此它是returns a Promise
。
因此,要对其进行测试,您需要执行以下操作:
it.only ( "should throw on invalid arguments", () => {
const str = "hello";
getUsers ( str ).then ( function ( success ) {
}, function ( err ) {
expect ( err ).toBe ( /invalid/gi );
} );
测试异步代码的其他方法之一是:
it.only ( "should throw on invalid arguments", () => {
const str = "hello";
try {
await getUsers("hello");
} catch (e) {
expect(e).toMatch(/invalid/gi);
}
});
您可以在此处获得更多详细信息:Jest: Testing Asynchronous Code