Jest/Supertest errors with TypeError: app.address is not a function

Jest/Supertest errors with TypeError: app.address is not a function

首先,我尝试了答案 - 没有帮助解决,接受的答案没有解决我的问题。

我正在尝试使用 Jest/Supertest 测试我的 API 端点。从一个简单的 /test 端点开始。然而,当我 运行 测试时,我得到: TypeError: app.address is not a function.

app.js:

...
// Set server (default to 3000)
  app.set('port', process.env.PORT || 3000);
  // Start server
  const server = http.listen(app.get('port'), () => {
    logger.info(`Worker ${process.pid} running on ${app.get('port')} in ${app.get('env')} mode`);
  });

  module.exports = server;
...

app.test.js:

const server = require('./app');
const supertest = require('supertest');
const request = supertest(server);

it('Gets the test endpoint', async (done) => {
  // Sends GET Request to /test endpoint
  const res = await request.get('/test');
  done();
});

测试运行输出:

FAIL  ./app.test.js
  ✕ Gets the test endpoint (24 ms)

  ● Gets the test endpoint

    TypeError: app.address is not a function

      14 | it('Gets the test endpoint', async (done) => {
      15 |   // Sends GET Request to /test endpoint
    > 16 |   const res = await request.get('/test');
         |                             ^
      17 |
      18 |   // ...
      19 |   done();

欢迎任何意见,谢谢。

上面 @jonrsharpe 的评论是正确答案:

Supertest takes the app, not the server. You don't need to listen, it sets up the port for you (that's one of the benefits - whosebug.com/a/62992056/3001761). I'd recommend splitting up the app and the server parts, as I've done here https://github.com/textbook/starter-kit/tree/1567d269b8afe5d93408202900ac0ac1473fd89e/server