Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用jest和supertest进行测试时,节点EADDRINUSE:地址已在使用:::3000_Javascript_Node.js_Jestjs_Supertest - Fatal编程技术网

Javascript 使用jest和supertest进行测试时,节点EADDRINUSE:地址已在使用:::3000

Javascript 使用jest和supertest进行测试时,节点EADDRINUSE:地址已在使用:::3000,javascript,node.js,jestjs,supertest,Javascript,Node.js,Jestjs,Supertest,我正在尝试使用jest和supertest测试我的API端点: 我的测试路由文件: const app = require('../../index') const request = require('supertest') describe('test app endpoints', ()=>{ test('index should return 200 code', async (done) =>{ const response = await r

我正在尝试使用jest和supertest测试我的API端点:

我的测试路由文件:

const app = require('../../index') 
const request = require('supertest')


describe('test app endpoints', ()=>{
    test('index should return 200 code', async (done) =>{
        const response = await request(app).get('/')
        expect(response.statusCode).toBe(200)
        done()
    })
index.js:

const express = require('express')
const bodyParser = require('body-parser')
const app = express()

const port = 3000


app.set('view engine', 'ejs')
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
    extended: true
}));

app.use('/', require('./routes/conversions'))

module.exports = app.listen(port, (err) => {
    if (err) throw err
    console.log(`Server is running on port ${port}`)
})
if (process.env.NODE_ENV !== 'test') {
    app.listen(port);
}
当我运行此测试时,我得到关于占用端口的错误信息:


我怎样才能解决这个问题并且不阻塞我的端口进行测试?

您计算机上的其他东西正在使用端口3000;这就是全部。只需将
端口
变量设置为其他变量;8080和8000是流行的选择。

这个问题实际上与您在测试环境中运行服务器的方式有关。 解决此问题的一个简单方法是将app.listen()包装在一个条件中,以检查该环境是否为测试环境。在测试环境中,通过Supertest运行服务器时,不需要让应用程序在网络端口上侦听。 因此,通过在index.js中添加条件检查来修复此问题:

if (process.env.NODE_ENV !== 'test') {
    app.listen(port);
}

要了解更多信息,请使用其他端口?你真的不应该使用低于8000左右的端口号。我试图将我的端口号更改为其他端口号,但使用新的端口号时出现了相同的错误。它是否试图多次启动你的应用程序?因为这是行不通的……不幸的是,这不是一个问题,因为“lsof-i:3000”不返回在该端口上运行的其他程序。我相信这是一个问题与笑话或超级测试,他们运行这些端口多次。我试图将我的端口号更改为其他端口号,但得到的错误与新端口号相同。请确认,当您运行
node index.js