在我的React项目中,我正在单元测试一个调用另一个异步函数的异步函数。
//SomeComponent.js
getAllJobs = async () => {
var allJobStatuses = new Array();
for(var endpointForRegion in this.props.regionalEndpointsMap) {
let jobStatusesForRegion = await getJobStatuses(endpoint);
allJobStatuses = allJobStatuses.concat(jobStatusesForRegion);
....
}
return allJobStatuses;
}
getJobStatuses = async (endpoint) => {
const response = await fetch(endpoint, {
......
return await response.json();
}
//SomeComponentTest.js
describe('<SomeComponent />', () => {
....
beforeEach(() => {
props = {regionalEndpointsMap: {
'region1': 'region1ep',
'region2': 'region2ep'
}};
wrapper = shallow(<SomeComponent {...props} />);
});
it('should get jobs for all regions', async () => {
var startTime = new Date();
let mockdata = {[
{
jobId: 'id',
}
]};
jest.spyOn(wrapper.instance(), 'getJobStatuses').mockResolvedValue(data);
let allJobs = wrapper.instance.getAllJobs();
let expectedData = [
{jobId:'id'},
{jobId:'id'}
];
expect(allJobs).toEqual(expectedData);
}
尽管每次测试时,结果都是一个空的promise{},而不是预期的数据。我在网上找到了很多模拟异步“getJobStatuses”函数结果的实现,但都没有成功(显示了我在这里使用的实现)。为了测试调用它的函数(getAllJobs),模拟该函数结果的正确方法是什么
因为getAllJobs
是async
它将返回一个promise。你是想在这里等待promise吗?
let allJobs = await wrapper.instance.getAllJobs();
我在一个函数中有这样的代码块: 它获取一些数据,然后对数据运行验证()。 但是,我对数据的验证实际上也是异步的,因为它是根据一个json模式来验证数据的,而json模式位于一个独立的json文件中,所以它必须首先读取该文件。 我使用了一个承诺来读取文件内容,然后进行验证: 如何编辑此问题中的顶部代码块以解释if语句()中的异步函数?
我有一个异步函数,我想同时测试成功和失败。函数成功时返回一个字符串,失败时抛出。我在测试失败上失败得很惨。下面是我的代码: 我通过注释失败的代码并在注释中添加结果来禁用 正如你所看到的,什么都不起作用。我相信我的测试几乎是第一个失败测试的Promises示例和最后一个失败测试的Async/Await示例的完全副本,但是没有一个可以工作。 我相信与Jest文档中的示例的不同之处在于,它们展示了如何测
粗略地说,异步函数 为使用 Promise 的代码提供了更好的语法。 38.1. 异步函数:基础知识 考虑以下异步函数: async function fetchJsonAsync(url) { try { const request = await fetch(url); // async const text = await request.text(); // as
问题内容: 如何从异步函数返回值?我试图喜欢这个 它给了我, 问题答案: 您不能超出范围。为了获得预期的结果,您应该将其包装到异步IIFE中,即 样品。 有关更多信息 由于返回一个Promise,因此可以将其省略,如下所示: 然后像以前一样做
问题内容: 我如何最好地处理以下情况? 我有一个构造函数,需要一些时间才能完成。 我看到了三个选项,每个选项似乎都与众不同。 一种 ,向构造函数添加回调。 第二 ,使用EventEmitter发出“已加载”事件。 或三 ,阻止构造函数。 但我以前从未见过任何完成的事情。 我还有什么其他选择? 问题答案: 鉴于有必要避免在Node中进行阻塞,事件或回调的使用并不奇怪(1)。 稍加修改为2,即可将其与
简述 在某些情况下,React框架出于性能优化考虑,可能会将多次state更新合并成一次更新。正因为如此,setState实际上是一个异步的函数。 但是,有一些行为也会阻止React框架本身对于多次state更新的合并,从而让state的更新变得同步化。 比如: eventListeners, Ajax, setTimeout 等等。 详解 当setState() 函数执行的时候,函数会创建一个暂