NodeJs выражают MongoDB с шуткой при выполнении теста - PullRequest
0 голосов
/ 30 апреля 2018

Предыдущий вопрос Ссылка
Открытый вопрос

Сценарий

Я пытаюсь проверить, работает ли мой маршрут для конечной точки GET или нет, который я правильно установил и проверил, запустив сервер. Но мой тестовый пример дает мне следующую ошибку

Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.

Я немного искал и перепробовал все возможные решения, которые были заявлены, но все равно выдает мне ту же ошибку.

код

const request = require ('supertest');
const app = require ('../../app');
const db = require ('../../db.js');
const url = process.env.MONGO_URI || 'mongodb://localhost:27017'

beforeAll (done => {
  db.connect (url, err => {
    if (err) {
      console.log ('Unable to connect', err);
      process.exit (1);
    }else{
        console.log('Succesfully connected')
    }
  });
});

afterAll (done => {
  db.close ();
});


test ('should response the GET method',done => {
    const res = request (app).get ('/expense');
    return res
      .then (json => {
        console.log ("Length",json.body.length);
        expect (json.body.length).toBe (1, done ());
      })
      .catch (err => {});
  },10000);

Тестовый вывод

 ● Console

    console.log test/express/startupTest.test.js:12
      Succesfully connected
    console.log test/express/startupTest.test.js:26
      Length 1

  ● should response the GET method

    Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.

      at pTimeout (node_modules/jest-jasmine2/build/queueRunner.js:53:21)
      at Timeout.callback [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:523:19)
      at ontimeout (timers.js:469:11)
      at tryOnTimeout (timers.js:304:5)
      at Timer.listOnTimeout (timers.js:264:5)

Test Suites: 1 failed, 2 passed, 3 total
Tests:       1 failed, 6 passed, 7 total
Snapshots:   1 passed, 1 total
Time:        6.58s

1 Ответ

0 голосов
/ 08 мая 2018

Вам необходимо вызвать done callback после установления соединения с БД.

beforeAll (done => {
  db.connect (url, err => {
    if (err) {
      console.log ('Unable to connect', err);
      process.exit (1);
    }else{
      console.log('Succesfully connected');
      done();
    }
  });
});

То же самое с afterAll:

afterAll (done => {
  db.close (() => done());
});

Кроме того, вам не нужно использовать done обратный вызов в тестовом примере, поскольку вы возвращаете обещание:

test ('should response the GET method', () => {
  const res = request (app).get ('/expense');
  return res
    .then (json => {
      console.log ("Length",json.body.length);
      expect (json.body.length).toBe (1);
    })
    .catch (err => {});
});

Когда вы возвращаете обещание из тестового примера, разрешение теста будет отложено до разрешения обещания.

...