Я реализую тесты конечных точек React API с nock
Когда я запускаю GET и POST API вместе (см. Мой фактический код ниже), получая ошибку ниже.
Запрос не выполнен с кодом состояния 404
Однако, когда я запускаю ТОЛЬКО один из них (то есть закомментировал код для другого), тогда эти отдельные GET иТесты POST API работают нормально, как и ожидалось (оба теста пройдены).
Вот мой код маршрутизации / контроллера Backend Express (симпатичный шаблон)
// GET all items - Working in Postman
router.get("/", (req, res, next) => {
Revenue.find(
{},
null,
{
sort: { createdAt: -1 }
},
(err, docs) => {
if (err) {
return next(err);
} else {
res.status(200).json(docs);
}
}
);
});
// Create a new item - Working in Postman
router.post("/", (req, res, next) => {
let revenue = new Revenue(req.body);
// revenue.port = req.decoded.port._id || "";
revenue.save((err, newRevenue) => {
if (err) {
console.log("Failed to post new data because ", err);
return next(err);
} else {
res.status(200).json(newRevenue);
}
});
});
И вот важная часть кода(красивый шаблон) из внутреннего файла index.js
require("dotenv").config();
const express = require("express");
const bodyParser = require("body-parser");
const revenueRoutes = require("./routes/revenueRoutes");
const app = express();
config.connectDB();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use("/api/revenue", revenueRoutes);
app.listen(5000, () => {
console.log("Express Server running on port 5000");
});
Мой файл .test.js ниже
const host = "http://localhost:3000";
` it("API test-1 - GET (/api/revenue)", done => {
nock(host)
.defaultReplyHeaders({
"access-control-allow-origin": "*",
"Content-Type": "application/json"
})
.get("/api/revenue")
.reply(200, "Get data");
// .log(console.log);
axios.get("http://localhost:3000/api/revenue").then(response => {
expect(response.data).toBe("Get data");
expect(typeof response.data).toBe("string");
done();
});
});
it("API test-2 - POST (/api/revenue)", done => {
nock(host)
.defaultReplyHeaders({
"access-control-allow-origin": "*",
"Content-Type": "application/json"
})
.post("/api/revenue", {
wharfage: 138,
berth_hire: 125,
other_services: 565,
port_dues: 251,
total: 25,
port: "5c6f95b6910af53296c4e3d7",
date: "2019-02-28"
})
.reply(200, "POST data");
// .log(console.log);
axios
.post("http://localhost:3000/api/revenue", {
wharfage: 138,
berth_hire: 125,
other_services: 565,
port_dues: 251,
total: 25,
port: "5c6f95b6910af53296c4e3d7",
date: "2019-02-28"
})
.then(response => {
expect(response.data).toBe("POST data");
expect(typeof response.data).toBe("string");
done();
});
});`
Возможное решение Я просмотрел эту проблему - и, как там предлагается, я включил коды ударов в мой файл .test.js, но проблема остается
beforeEach(function(done) {
if (!nock.isActive()) nock.activate();
done();
});
И эта
afterEach(function() {
if (!nock.isDone()) {
nock.cleanAll();
}
});
Версии
Nock "^ 10.0.6",
Узел v11.8.0