javascript - beforeEach fetch() - 将 res 传递给 'it' 函数
问题描述
在 mocha/chai TDD 测试中,这个 API 调用真的很挣扎,我正在尝试设置。
基本上,beforeEach()
测试,我想进行 fetch api 调用。然后将 my 传递给res
每个it()
函数,这样我就可以对响应运行单独的测试。
我的 beforeEach() 函数似乎可以工作,因为我可以成功地 console.log(res)。
但是,当我的it()
函数/测试运行时出现以下错误:
错误:超过 2000 毫秒的超时。对于异步测试和钩子,确保调用了“done()”;如果返回 Promise,请确保它已解决。
如果我添加done()
到我的 beforeEach 函数中,但这并不能解决问题。然后我收到一个新错误,我似乎无法解决:
Error: Resolution method is overspecified. Specify a callback *or* return a Promise; not both.
我迷失了如何解决这个问题。如何成功运行我的beforeEach()
, 并将 for resit()
成功传递给每个后续函数?
这是我的代码:
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);
})
这是我的控制台.logging beforeEach()
:
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
,我们应该选择坚持async/await
或坚持promise
。不要混合它们,因为这是不必要的。
async/await
describe("1) Check for succcessful fetech API call", () => {
let res; // define variable to store the response
beforeEach(async () => { // define async
const response = await fetch(
"https://pixabay.com/api/?key=9656065-a4094594c34f9ac14c7fc4c39&q=manhattan&image_type=photo&page=1&per_page=9"
);
res = response.json(); // store the response to our variable
});
it("a) Should return an object, with an array count of 9 elements", function(res) {
console.log(res);
});
});
或者,对于promise
describe("1) Check for succcessful fetech API call", () => {
let res; // define variable to store the response
beforeEach((done) => { // specify done
fetch(
"https://pixabay.com/api/?key=9656065-a4094594c34f9ac14c7fc4c39&q=manhattan&image_type=photo&page=1&per_page=9"
).then((response) => {
res = response.json(); // store the response to our variable
done(); // call done here once promise is resolved
})
});
it("a) Should return an object, with an array count of 9 elements", function(res) {
console.log(res);
});
});
希望能帮助到你!
推荐阅读
- mysql - Mysql - 查询特定日期
- java - spring boot:如何为列值加密设置db2加密密码
- java - Eclipse IDE进程间死锁,不断重启和休眠,进度永不解决
- angular - Angular AOT 编译失败,因为“无法为属性构造查询..”
- ios - iOS webview CSS hack
- python - 如何使用点运算符在python中传递多个参数
- c++ - LLVM 构建错误(再次缺少函数)
- c# - 组合框文本 ValueConverter 滞后 - C# WPF XAML
- java - 在java中比较多维数组中的三个索引导致越界异常
- php - 软件设计 - 在哪里保留影响应用程序逻辑/行为的预定义值