Избегайте использования localhost для разрешения тестов в mocha - PullRequest
0 голосов
/ 21 февраля 2019

По какой-то причине, когда я устанавливаю свое приложение в test.js, например:

const app = express();

Я получаю ошибку 404 для всех тестов.

Однако,когда я устанавливаю это следующим образом

const app = 'http://localhost:3000'

все тесты проходят успешно.

Я знаю, что это не лучший способ объявить app всреда тестирования.как я могу избежать использования пути исправления, например localhost?

пример:

const express = require('express');
const app = express();
// const app = 'http://localhost:3000'
const chai = require("chai");
const expect = chai.expect;
const request = require('supertest');

  it('For all bookings', function (done) {
    request(app)
      .get('/bookings')
      .end(function (err, res) {
        expect('Content-Type', /json/)
        expect(res.statusCode).to.be.equal(200);
        done();
      });
  });

таким образом я получаю Uncaught AssertionError: expected 404 to equal 200

, но если я раскомментирую const app = 'http://localhost:3000' для использованияэто вместо const app = express(); тогда тест проходит.

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

если мы сделали это в тестовом файле

const app = express();

, это означает, что мы создаем новое экспресс-приложение без заданных маршрутов.Правильный способ - использовать одно и то же экспресс-приложение, а не создавать новое.

Чтобы сделать это, мы можем экспортировать приложение Express и сослаться на него из тестового файла.

// index.js
const express = require('express')
const app = express()
const port = 3000

app.get('/bookings', (req, res) => res.send('Hello World!'))

app.listen(port, () => console.log(`Example app listening on port ${port}!`))

module.exports = app; // export express app

Между тем для тестового файла

// test.js

...

const app = require("./index"); // import the app

it("For all bookings", function(done) {
  request(app)
    .get("/bookings")
    .end(function(err, res) {
      console.log(res);
      expect("Content-Type", /json/);
      expect(res.statusCode).to.be.equal(200);
      done();
    });
});

Надеюсь, это поможет

0 голосов
/ 21 февраля 2019

const app = express() создает фиктивный экземпляр Express без маршрутов.Он не может ответить на запрос к /bookings конечной точке, поскольку такой конечной точки нет.

То, что http://localhost:3000 работает, означает, что приложение, имеющее маршрут /bookings, в данный момент выполняется.

Вв случае, если экземпляр приложения Supertest имеет request, экземпляр приложения с маршрутом /bookings должен быть импортирован:

const app = require('./app');
...