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
首先,我尝试了答案
我正在尝试使用 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