Node.js 服务器实例、jest和';听录音使用::3000';
我不熟悉jest、node和express,在测试我的应用程序时遇到了问题 实际的代码似乎正在工作——只是在将服务器实例传递到每个测试文件(user.test.js和genres.test.js)并运行jest时,端口被阻塞了。我假设这是因为我在每个测试文件中创建了重复的服务器实例,而没有意识到这一点 使用标志Node.js 服务器实例、jest和';听录音使用::3000';,node.js,express,jestjs,Node.js,Express,Jestjs,我不熟悉jest、node和express,在测试我的应用程序时遇到了问题 实际的代码似乎正在工作——只是在将服务器实例传递到每个测试文件(user.test.js和genres.test.js)并运行jest时,端口被阻塞了。我假设这是因为我在每个测试文件中创建了重复的服务器实例,而没有意识到这一点 使用标志--runInBand运行jest是有效的,并且只使用一个测试文件也是有效的,但这并不能帮助我准确地理解发生了什么 我已经发布了下面的示例代码,但我正在努力减少它,但是我确实认为大部分代码
--runInBand
运行jest是有效的,并且只使用一个测试文件也是有效的,但这并不能帮助我准确地理解发生了什么
我已经发布了下面的示例代码,但我正在努力减少它,但是我确实认为大部分代码都是无关的,这取决于我如何将服务器传递到每个文件
再一次,抱歉这么长,但我认为这对任何人来说都应该是非常基本的,除了我!谢谢
index.js(.) genres.js(./routes) users.js(./routes) genres.test.js(/测试) user.test.js(./tests) 希望(第2点)能帮助其他人解决这个问题 通过将应用程序从服务器上拆分,它对我起到了作用。我不确定这是否是正确的方法,我也不确定为什么它与应用程序而不是服务器一起工作,但我所有的测试现在都通过了 index.js现在是app.js:
const express = require('express');
const app = express();
const genres = require('./routes/genres');
const users = require('./routes/users');
app.use(express.json());
app.use('/api/genres', genres);
app.use('/api/users', users);
// export server to be used in test file
module.exports = app;
服务器被分离到另一个文件中:
const app = require('./app');
const port = process.env.PORT || 3000;
app.listen(port, () => console.log(`Listening on port ${port}...`));
然后测试文件导入应用程序而不是服务器。因此,每个测试并不创建自己的实例
注:我想——我真的不知道这有多正确,但正如前面提到的,它是有效的,希望(第2点)能帮助其他人解决这个问题
通过将应用程序从服务器上拆分,它对我起到了作用。我不确定这是否是正确的方法,我也不确定为什么它与应用程序而不是服务器一起工作,但我所有的测试现在都通过了
index.js现在是app.js:
const express = require('express');
const app = express();
const genres = require('./routes/genres');
const users = require('./routes/users');
app.use(express.json());
app.use('/api/genres', genres);
app.use('/api/users', users);
// export server to be used in test file
module.exports = app;
服务器被分离到另一个文件中:
const app = require('./app');
const port = process.env.PORT || 3000;
app.listen(port, () => console.log(`Listening on port ${port}...`));
然后测试文件导入应用程序而不是服务器。因此,每个测试并不创建自己的实例
注意:我想-我真的不知道这有多正确,但如前所述,它是有效的这个错误意味着端口已经在使用中,就像其他正在使用它的东西一样,甚至可能是这个代码的另一个副本。要么跟踪重复的进程,要么切换到不同的端口。同意-我认为肯定是这段代码,因为如果我删除其中一个测试文件,我就不会再收到错误。这使我认为这是我导出服务器实例的方式(即复制的方式),但我没有足够的经验知道为什么这个错误意味着端口已经在使用中,就像其他正在使用它的东西一样,甚至可能是这个代码的另一个副本。要么跟踪重复的进程,要么切换到不同的端口。同意-我认为肯定是这段代码,因为如果我删除其中一个测试文件,我就不会再收到错误。这让我觉得这就是我导出服务器实例的方式(即它被复制),但我没有足够的经验知道为什么
const request = require('supertest');
let server;
describe('user tests', () => {
const exec = async function(){
return await request(server)
.post('/api/user');
};
beforeEach(() => {
server = require('../index');
});
afterEach(async () => {
await server.close();
});
describe('POST /', () => {
it('should return 200', async () => {
const res = await request(server).post('/api/users');
expect(res.status).toBe(200);
});
});
});
const express = require('express');
const app = express();
const genres = require('./routes/genres');
const users = require('./routes/users');
app.use(express.json());
app.use('/api/genres', genres);
app.use('/api/users', users);
// export server to be used in test file
module.exports = app;
const app = require('./app');
const port = process.env.PORT || 3000;
app.listen(port, () => console.log(`Listening on port ${port}...`));