{ Ve-6ren">
gpt4 book ai didi

node.js - 使用 Nock 响应 API 测试失败, "Error : Nock : No match for request"

转载 作者:行者123 更新时间:2023-12-03 12:15:47 24 4
gpt4 key购买 nike

这是在后端和前端工作正常的 Express Route 代码。

//编辑/更新容器类型 by_id - 工作

router.put("/:id", (req, res, next) => {
Vessel_Type.findByIdAndUpdate(
req.params.id,
req.body,

{ new: true },
(err, updatedRecord) => {
if (err) {
console.error(err);
return next(err);
} else {
res.status(200).send(updatedRecord);
}
}
);
});

这是我在 React 前端的 API 测试代码,带有 nock
  it("API test-3 - PUT (/api/vesseltype/id)", done => {
nock(host)
.defaultReplyHeaders({
"access-control-allow-origin": "*",
"Content-Type": "application/json"
})
.persist()
.log(console.log)
.put("/api/vesseltype/5c62cc8f1774b626cd7fdbe6", {
vesseltype: "Super Large Cargo Ship-45"
})
.delayBody(1000)
.reply(200, "PUT/EDIT data with reqheaders");

axios
.put("http://localhost:3000/api/vesseltype/5c62cc8f1774b626cd7fdbe6", {
vesseltype: "Super Large Cargo Ship-45"
})
.then(response => {
expect(response.data).toBe("PUT/EDIT data with reqheaders");
expect(typeof response.data).toBe("string");
done();
});
});

测试中错误的控制台日志记录在终端中提供以下内容
    console.log node_modules/nock/lib/interceptor.js:332
matching http://localhost:3000/api/vesseltype/5c62cc8f1774b626cd7fdbe6 to PUT http://localhost:3000/api/vesseltype/5c62cc8f1774b626cd7fdbe6: false

console.error node_modules/jsdom/lib/jsdom/virtual-console.js:29
Error: Error: Nock: No match for request {
"method": "OPTIONS",
"url": "http://localhost:3000/api/vesseltype/5c62cc8f1774b626cd7fdbe6",
"headers": {
"origin": "http://localhost",
"access-control-request-method": "PUT",
"user-agent": "Mozilla/5.0 (linux) AppleWebKit/537.36 (KHTML, like Gecko) jsdom/11.12.0",
"host": "localhost:3000",
"content-length": 0
}
}
at Object.dispatchError (/home/paul/codes-Lap/React/Volteo/IES/IES-Rohan-WIP/client/node_modules/jsdom/lib/jsdom/living/xhr-utils.js:65:19)
at EventEmitter.client.on.err (/home/paul/codes-Lap/React/Volteo/IES/IES-Rohan-WIP/client/node_modules/jsdom/lib/jsdom/living/xmlhttprequest.js:676:20)
at EventEmitter.emit (events.js:202:15)

然而,我的 PUT 路由( http://localhost:3000/api/vesseltype/5c62cc8f1774b626cd7fdbe6 )在 nock 和 axios 之间完美匹配。

我已经解决了这些 github 问题和 SO 问题 here , here , 和 here但这些解决方案对我没有帮助。

最佳答案

显然,您的框架/库在调用 PUT 之前调用了 OPTIONS 请求。
它与CORS有关。
Described here
你可以试试nock-ing OPTIONS。

关于node.js - 使用 Nock 响应 API 测试失败, "Error : Nock : No match for request",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54878814/

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