【发布时间】:2020-03-04 03:14:48
【问题描述】:
我正在使用 Jest 库对我的节点项目进行单元测试,一切正常。当我为路由身份验证创建新测试时,它开始显示服务器已经在端口 4000 上运行,即使我正在使用 afterEach() 函数关闭服务但不知道为什么仍然让服务器已经在端口 4000 上运行。
即使我已经删除了路由身份验证的新测试,并通过关闭所有终端重新启动我的项目,但每当我运行项目时,它开始显示服务器已在端口 4000 上运行的错误。
这是用户测试文件中正确关闭服务器的代码,在下一个测试文件中,我再次使用相同的功能进行服务器连接和关闭。
const request = require("supertest");
const { Genre } = require("../../models/genre");
const { User } = require("../../models/user");
const mongoose = require("mongoose");
let server;
describe("/api/genres", () => {
beforeEach(() => {
server = require("../../index");
});
afterEach(async () => {
server.close();
await Genre.remove({});
});
第二个测试文件代码
const { User } = require("../../models/user");
const { Genre } = require("../../models/genre");
const request = require("supertest");
describe("auth middleware", () => {
beforeEach(() => {
server = require("../../index");
});
afterEach(async () => {
await Genre.remove({});
server.close();
});
这是............的输出 ● auth 中间件 › 如果没有提供令牌,应该返回 401
listen EADDRINUSE: address already in use :::4000
10 |
11 | const port = process.env.PORT || 4000;
> 12 | const server = app.listen(port, () =>
| ^
at Function.listen (node_modules/express/lib/application.js:618:24)
at Object.<anonymous> (index.js:12:20)
at Object.<anonymous> (tests/integration/auth.test.js:6:14)
测试套件:1 个失败,3 个通过,总共 4 个 测试:1 次失败,26 次通过,总共 27 次 快照:共 0 个 时间:13.606s 运行所有测试套件。
Index.js 代码
const winston = require("winston");
const express = require("express");
const app = express();
require("./startup/logging")();
require("./startup/routes")(app);
require("./startup/db")();
require("./startup/config")();
require("./startup/validation")();
const port = process.env.PORT || 4000;
const server = app.listen(port, () =>
winston.info(`Listening on port ${port}...`)
);
module.exports = server;
【问题讨论】:
-
您可以将代码发布到您的
index.js文件中吗? -
多次调用
app.listen会这样做。 -
为什么不等待
server.close();? -
@RobJohansen 我已经更新了 index.js 代码参见
-
@ManuelSpigolon 我试过了,但没有运气
标签: node.js express jestjs supertest