我正在尝试编写一个测试,它断言用Async/Await和Axios抛出了特定类型的错误。但是,当我运行我的测试时,我得到以下结果。为什么jest不恰当地拒绝我的承诺?谢啦!
错误:expect(received).Rejects.ToThrow()
预期已收到拒绝承诺,但它解析为ValueBR>Data":“Response",”Status":404}
api.js:
import axios from 'axios';
import SpecialError from './specialError.js';
const get = async () => {
try {
const response = await axios.get('sampleUrl', { withCredentials: true });
return response;
} catch (error) {
throw new SpecialError(error);
}
};
export default get;
specialerror.js:
export default class SpecialError extends Error {
constructor() {
super();
this.isSpecialError = true;
}
}
api.test.js:
import axios from 'axios';
import get from './api';
import SpecialError from './specialError.js';
test('testing the api get method', async () => {
axios.get.mockImplementation(() => Promise.resolve({
data: 'response',
status: 404,
}));
const expectedError = new SpecialError('foo');
await expect(get()).rejects.toEqual(expectedError);
});
看起来您正在测试错误案例,在这种情况下,
import axios from 'axios';
import get from './code';
test('testing the api get method', async () => {
jest.spyOn(axios, 'get').mockRejectedValue(new Error('error'));
await expect(get()).rejects.toThrow('error'); // Success!
});
更新
OP更新了问题,询问如何测试特定类型的错误。
您可能希望抛出如下所示的错误:
try {
// ...
} catch (error) {
throw new SpecialError(error.message); // <= just use the error message
}
。。。和
export default class SpecialError extends Error {
constructor(...args) {
super(...args); // <= pass args to super
this.isSpecialError = true;
}
}
。。。但是考虑到这些变化,您可以这样测试:
import axios from 'axios';
import get from './api';
import SpecialError from './specialError.js';
test('testing the api get method', async () => {
jest.spyOn(axios, 'get').mockRejectedValue(new Error('the error'));
const promise = get();
await expect(promise).rejects.toThrow(SpecialError); // <= throws a SpecialError...
await expect(promise).rejects.toThrow('the error'); // <= ...with the correct message
});
请注意,测试特定的错误类型和消息有点棘手,因为
问题内容: 以下 如何在React中与axios一起使用async / await 我试图在React.js应用程序中使用Async / Await向我的服务器发出一个简单的get请求。服务器加载一个简单的JSON ,看起来像这样 JSON格式 我可以使用简单的jquery ajax get方法将数据获取到我的React App。但是,我想利用axios库和Async / Await来遵循ES7标
我已经复习了/,在复习了几篇文章之后,我决定自己测试一下。然而,我似乎无法理解为什么这不起作用: 控制台输出以下内容(节点V8.6.0): >外:“对象承诺” >内部:嘿那里 为什么函数内部的日志消息会在之后执行?我认为创建/的原因是为了使用异步任务执行同步执行。 有没有一种方法可以使用函数内部返回的值,而不用后面的?
Async/await 是以更舒适的方式使用 promise 的一种特殊语法,同时它也非常易于理解和使用。 Async function 让我们以 async 这个关键字开始。它可以被放置在一个函数前面,如下所示: async function f() { return 1; } 在函数前面的 “async” 这个单词表达了一个简单的事情:即这个函数总是返回一个 promise。其他值将自动被
在第一章节,我们简要介绍了async/.await,并用它来构建一个简单的服务器。本章将更为详细讨论async/.await的它如何工作以及如何async代码与传统的 Rust 程序不同。 async/.await是 Rust 语法的特殊部分,它使得可以 yield 对当前线程的控制而不是阻塞,从而允许在等待操作完成时,其他代码可以运行。 async有两种主要的使用方式:async fn和asyn
用asyncio提供的@asyncio.coroutine可以把一个generator标记为coroutine类型,然后在coroutine内部用yield from调用另一个coroutine实现异步操作。 为了简化并更好地标识异步IO,从Python 3.5开始引入了新的语法async和await,可以让coroutine的代码更简洁易读。 请注意,async和await是针对coroutin
我试图理解为什么下面两个代码块会产生不同的结果。 代码块1按预期工作,并返回从数据库中查找的提供程序的数组。另一方面,代码块2返回函数数组。在理解promissione.all()和async/await时,我觉得缺少了一些简单的东西。 代码块的差异如下: > 块1:创建许诺函数数组,然后使用map运算符将其包装在异步函数中。 块2:许诺函数的数组被创建为异步函数。因此,不调用map运算符。 如果