React Jest проблема при экспорте сервера для тестирования интеграции - PullRequest
0 голосов
/ 20 февраля 2020

Довольно простая ситуация, я пытаюсь импортировать app.listen (порт) для тестирования. Тесты не пройдут (причины ошибки: app.address не является функцией, а server.close не является функцией). На самом деле серверная переменная возвращает пустой объект, поэтому импорт не выполняется должным образом, и это является причиной неудачных тестов ...

genres.test. js

const request = require("supertest");

let server;

describe("/api/genres", () => {
  beforeEach(() => {
    server = require("../../index");
  });
  afterEach(() => {
    server.close();
  });

  describe("GET /", () => {
    it("should return all genres", async () => {
      const res = await request(server).get("/api/genres");
      expect(res.status).toBe(200);
    });
  });
});

index. js

const express = require("express");
const app = express();

const port = process.env.PORT || 3000;
    const server = app.listen(port, () => console.log(`Listening on port ${port}`));

    module.exports = server;

Я что-то упускаю из-за импорта? Дайте мне знать, если вам нужно больше строк кода / частей (обратите внимание, что индекс. js, который я предоставил, не является полным) или если вам нужно полное сообщение об ошибке.

Я знаю, что этот вопрос уже задавался несколько раз, но в большинстве случаев решение состоит в том, чтобы просто импортировать app.listen вместо app, что я уже сделал. Я также попытался использовать экспорт по умолчанию вместо module.exports.

1 Ответ

1 голос
/ 21 февраля 2020

У меня работает.

index.js:

const express = require('express');

const app = express();
const port = process.env.PORT || 3000;

app.get('/api/genres', (req, res) => {
  console.log('api genres');
  res.sendStatus(200);
});

const server = app.listen(port, () => console.log(`Listening on port ${port}`));

module.exports = server;

index.test.js:

const request = require('supertest');

let server;

describe('/api/genres', () => {
  beforeEach(() => {
    server = require('./index');
  });
  afterEach(() => {
    server.close();
  });

  describe('GET /', () => {
    it('should return all genres', async () => {
      const res = await request(server).get('/api/genres');
      expect(res.status).toBe(200);
    });
  });
});

Результаты тестов:

 PASS   apollo-graphql-tutorial  src/stackoverflow/60321422/index.test.js
  /api/genres
    GET /
      ✓ should return all genres (289ms)

  console.log src/stackoverflow/60321422/index.js:11
    Listening on port 3000

  console.log src/stackoverflow/60321422/index.js:7
    api genres

Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        1.693s, estimated 2s
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...