【发布时间】:2020-07-20 09:32:30
【问题描述】:
我需要模拟在 NodeJS / Express 中开发的 REST API。我已经在使用 Jest 并尝试使用 Supertest / Nock 进行 API 测试。 据我了解,Supertest 将调用实际的 API 而不仅仅是模拟它。我不想要这个,因为它会在数据库等中创建条目。
我尝试使用 Nock 并且似乎是我需要的,但问题是我在路由处理程序中引用了“req”和“res”对象,在测试期间单独调用处理程序时这是未定义的。
代码: server.js
app.get("/api/user/:id/movies",testHander)
testHander.js
const axios = require("axios");
const testHander = async (req,res) =>{
let id = req.params.id;
const data = await axios.get(`http://backendServerURL/user/${id}/movies`)
return res.send(data);
}
testing.test.js
const nock = require("nock");
const testHander = require("../handler/testHander");
describe("Test Handler", () => {
it("should return user movies", () => {
const id = 1;
nock("http://someRandomURL")
.get(`/user/${id}/movies`)
.reply(200, { data: { movies: [{ name: "Avengers", year: "2019" }] } });
const response = await testHander();
expect(response.data).toBe("someExpectation")
});
});
问题:我应该如何通过模拟 backendServerUrl 来测试这段代码?
【问题讨论】:
标签: node.js unit-testing express jestjs