#node.js #express #jestjs #supertest #econnrefused
#node.js #экспресс #jestjs #супертест #экономичный
Вопрос:
Я изо всех сил пытаюсь устранить ошибку в своем тесте jest с помощью супертеста, я думаю, что это проблема с моим тестом, а не с моим кодом.
Моя проблема
Я пытаюсь создать внутренний API, используя node.js и выразить, используя TDD. У меня есть следующие файлы для настройки сервера:
//in app.js const express = require('express'); const app = express(); app.post('api/1.0/users', (req, res) =gt; { return res.send(); }); module.exports = app; //in index.js const app = require('./app'); const port = 3000; app.listen(port, () =gt; console.log(`listening on port: ${port}`));
Когда я запускаю сервер, он успешно запускается на порту 3000. Однако, когда я выполняю следующий тест:
//in UserRegister.test.js const request = require('supertest'); const app = require('../app'); //this is in a __tests__ subdir hence '..' it('returns 200 OK when sign-up request is valid', (done) =gt; { request(app) .post('api/1.0/users') .send({ first_name: 'person', last_name: 'one', password: '123', }) .expect(200, done); });
Проблема
Я понял ошибку connect ECONNREFUSED 127.0.0.1:80
.
Я думаю, это говорит мне о том, что тест пытается подключиться к порту 80, однако на порту 80 не настроен сервер, поэтому соединение отклонено, но он должен пытаться подключиться к порту 3000.
То, что я пытался
- Насколько мне известно, все пакеты установлены надлежащим образом
- Я попробовал хакерское решение заставить мой сервер прослушивать порт 80, но это вызывает ту же проблему.
- прочтите документы supertest, чтобы попробовать альтернативные решения
- Попробовал следующий другой синтаксис на случай, если это была очевидная синтаксическая проблема, которую я неправильно истолковал:
it('returns 200 OK when sign-up request is valid', async () =gt; { const response = await request(app).post('api/1.0/users') .send({ first_name: 'person', last_name: 'one', password: '123', }) expect(response.statusCode).toEqual(200); });
Что я упускаю? Я все больше убеждаюсь, что это мое непонимание того, как работает супертест, но я, похоже, не могу понять, в чем проблема.
Я просто ищу, чтобы тест либо прошел, либо не прошел (либо получил ответ 200 или 404), но только после того, как он подключится к правильному порту (т. Е. Я застрял на первом препятствии).
Комментарии:
1. Добро пожаловать в Stack Overflow. Я надеюсь, что вы продолжите задавать вопросы такого уровня качества. Попробуйте поместить строку
export app
в нижней частиapp.js
файла, чтобы строка тестового файлаconst app = require('../app')
могла получить приложение, созданноеexpress()
.
Ответ №1:
Проблема в URI. Я только что попробовал тест, который URL-адрес не начинает использоваться /
, и получил ту же ошибку. Так что вместо этого
.post('api/1.0/users')
использовать
.post('/api/1.0/users')
может решить проблему.
Комментарии:
1. Это сработало, спасибо!