Javascript 使用Jest和Create React App(CRA)为异步函数中的同步代码预期函数抛出
我正在使用Jest对CreateReact应用程序进行测试,我正在尝试测试一个异步函数和一个同步代码,我需要在同步部分出错时抛出它 测试包括在接收错误参数类型时期望函数抛出 函数在接收非未定义的参数类型时抛出“无效参数”。(不带参数的函数)或“数字” 用户API是要调用的API url 以下是函数:Javascript 使用Jest和Create React App(CRA)为异步函数中的同步代码预期函数抛出,javascript,asynchronous,synchronization,jestjs,Javascript,Asynchronous,Synchronization,Jestjs,我正在使用Jest对CreateReact应用程序进行测试,我正在尝试测试一个异步函数和一个同步代码,我需要在同步部分出错时抛出它 测试包括在接收错误参数类型时期望函数抛出 函数在接收非未定义的参数类型时抛出“无效参数”。(不带参数的函数)或“数字” 用户API是要调用的API url 以下是函数: export const getUsers = async (count, ...rest) => { if (["undefined", "number"].includes(typeo
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,但它没有抛出任何东西
测试方法是正确的还是我写的测试不好?如果它不好,我如何改进它
谢谢。因为您的
getUsers
是一个函数,所以它是。
因此,为了测试它,您需要执行以下操作:
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);
}
});
您可以在这里获得更多详细信息:我不明白您为什么要这样编写此函数。如果您的计数会限制响应长度,那么这种预先指定计数的方法会很有趣,例如使用查询参数。在您的情况下,您只是将膨胀添加到一个简单的fetch中,将关注点分为两个不同的函数(fetch和slice)可能与@BJRINT重复。谢谢您的回复,但我真的不知道什么时候在函数内部或外部进行测试?例如,请查看此链接:@brian住在户外不,我的问题是同步和异步之间的组合这就是诀窍!这是。将函数更改为抛出一个实际的
错误,如下所示:抛出新错误(“无效参数”)代码>和您的测试成为justexpect(getUsers(str)).rejects.toThrow(/invalid/gi)代码>你好,它工作了谢谢你,我的坏我在等待它抛出时传递了一个号码(这是错误的):帕根,这是一个。函数应该抛出如下的错误:抛出新错误(“无效参数”)代码>。然后测试就是:expect(getUsers(str)).rejects.toThrow(/invalid/gi)代码>