首先,我尝试了答案 here - 没有帮助解决,接受的答案没有解决我的问题。
我正在尝试使用 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();
欢迎提供任何意见,谢谢。
答案 0 :(得分:0)
来自上面 @jonrsharpe 的评论是正确答案:
<块引用>Supertest 使用的是应用程序,而不是服务器。您不需要监听,它会为您设置端口(这是好处之一 - stackoverflow.com/a/62992056/3001761)。我建议将应用程序和服务器部分分开,就像我在这里所做的那样https://github.com/textbook/starter-kit/tree/1567d269b8afe5d93408202900ac0ac1473fd89e/server