gpt4 book ai didi

javascript - beforeEach fetch() - 将 res 传递给 'it' 函数

转载 作者:行者123 更新时间:2023-11-28 03:22:47 25 4
gpt4 key购买 nike

在 mocha/chai TDD 测试中这个 API 调用确实很困难,我正在尝试设置。

基本上,beforeEach() 测试,我想进行 fetch api 调用。然后将我的 res 传递到每个 it() 函数中,这样我就可以对响应运行单独的测试。

我的 beforeEach() 函数似乎可以工作,因为我可以成功 console.log(res) 。

但是,当我的 it() 函数/测试运行时,我收到以下错误:

Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.

如果我将 done() 添加到我的 beforeEach 函数中,但这并不能解决问题。然后我收到一个新错误,我似乎无法解决该错误:

 Error: Resolution method is overspecified. Specify a callback *or* return a Promise; not both.

我不知道如何解决这个问题。如何成功运行 beforeEach(),并将 res 成功传递到每个后续 it() 函数?

这是我的代码:

describe('1) Check for succcessful fetech API call', () => {
beforeEach( async (done) => {
await fetch('https://pixabay.com/api/?key=9656065-a4094594c34f9ac14c7fc4c39&q=manhattan&image_type=photo&page=1&per_page=9')
.then((res) => {
console.log(res);
return res.json();
})
done();
});

it('a) Should return an object, with an array count of 9 elements', function(res) {
console.log(res);
// expect(res).to.be.an('object');
// expect(res.hits).to.have.lengthOf(9);
})

这是我的 beforeEach() 中的 console.logging:

Response {
size: 0,
timeout: 0,
[Symbol(Body internals)]:
{ body:
Gunzip {
_readableState: [ReadableState],
readable: true,
domain: null,
_events: [Object],
_eventsCount: 7,
_maxListeners: undefined,
_writableState: [WritableState],
writable: true,
allowHalfOpen: true,
_transformState: [Object],
bytesRead: 0,
_handle: [Zlib],
_hadError: false,
_writeState: [Uint32Array],
_outBuffer: <Buffer 7b 22 74 6f 74 61 6c 48 69 74 73 22 3a 35 30 30 2c 22 68 69 74 73 22 3a 5b 7b 22 6c 61 72 67 65 49 6d 61 67 65 55 52 4c 22 3a 22 68 74 74 70 73 3a 2f ... >,
_outOffset: 0,
_level: -1,
_strategy: 0,
_chunkSize: 16384,
_flushFlag: 2,
_scheduledFlushFlag: 0,
_origFlushFlag: 2,
_finishFlushFlag: 2,
_info: undefined },
disturbed: false,
error: null },
[Symbol(Response internals)]:
{ url: 'https://pixabay.com/api/?key=9656065-a4094594c34f9ac14c7fc4c39&q=manhattan&image_type=photo&page=1&per_page=9',
status: 200,
statusText: 'OK',
headers: Headers { [Symbol(map)]: [Object] },
counter: 0 } }

最佳答案

通常,对于异步 beforeEach 函数,您需要在 Hook 之前实例化变量,然后在 Hook 定义中覆盖该变量。

describe('foo', () => {
let result;

beforEach(async () => {
result = await blah();
});

test('bar', () => {
assert.equal(result, 'foobar');
});
});

这与 mocha 或测试框架没有任何关系,它只是您在 js 测试中看到的惯用模式,无论是 mocha、jest 等。

关于javascript - beforeEach fetch() - 将 res 传递给 'it' 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58971340/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com