Несколько API-тестов с nock (библиотека-имитатор HTTP-сервера) не работает, что дает ошибку 404 - PullRequest
0 голосов
/ 27 февраля 2019

Я реализую тесты конечных точек 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

...