如何解决如何用 mocha 和 chai 测试 mongodb 数据库?
我正在尝试通过 mongoose 测试与 mongodb 数据库交互的 api 路由。我的测试工具是 chai 和 mocha。每次测试都会因为超时错误而失败。
错误:超过 2000 毫秒超时。对于异步测试和钩子,确保调用“done()”;如果返回 Promise,请确保它已解决。
路由被正确调用,函数findUserById
也被调用。但是,我注意到 findUserById
在服务器连接到 mongodb 之前被调用!
如何解决这个问题?
这是应用程序文件:
require("dotenv").config();
import express from "express";
import bodyParser from "body-parser";
import compression from "compression";
import cookieParser from "cookie-parser";
import rateLimit from "express-rate-limit";
import cors from "cors";
import { createServer } from "http";
import { Server } from "socket.io";
import searchRouter from "./routers/search";
import { SocketControler } from "./controllers/socket";
// Server
export const app = express();
const server = createServer(app);
const io = new Server(server);
// Middleware
app.use(cors({ credentials: true,origin: [process.env.CLIENT as string] }));
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(compression());
app.use(cookieParser());
app.use(rateLimit({ max: 100})); // limit each IP to 20 requests per minute
SocketControler.manageEvents(io);
// Routers
app.use(searchRouter);
app.locals.io = io;
// Start
connectToDatabase()
.then(() =>
server.listen(process.env.PORT,() =>
console.log(`server is listening on ${process.env.PORT}!`)
)
)
.catch((err) => console.log("error",err));
路线是:
interface GetUser extends Request {
params: {
id: string;
};
}
interface IResponse extends Response {
user: UserLean;
}
const getUser = async (
req: GetUser,res: IResponse
): Promise<IResponse> => {
try {
const user = await UserControler.findUserById(req.params.id);
return res.status(200).json({ user });
} catch (err) {
throw new Error("error.unkNown");
}
};
export default getUser;
控制器功能:
static findUserById(id: string) {
return UserDB.findById({ _id: id }).lean();
}
connectToDatabase 函数:
import Mongoose from "mongoose";
export default async function connectToDatabase() {
try {
return Mongoose.connect(process.env.MONGODB as string,{
useFindAndModify: false,useNewUrlParser: true,useUnifiedTopology: true,useCreateIndex: true,autoIndex: false,});
} catch (err) {
throw new Error(err);
}
}
和测试文件:
import chai from "chai";
import chaiHttp from "chai-http";
import { app } from "../index";
chai.use(chaiHttp);
const api = chai.request(app).keepopen();
describe("GET /user/:id",() => {
it("return user information",(done) => {
api
.get("/user/123")
.end((err,res) => {
chai.expect(res).to.have.status(200);
done();
});
});
});
我该如何解决这个问题?
解决方法
我们是这样做的:
首先,我们像您在 mypy==0.812
中一样创建了 db 连接,然后我们为我们的测试创建了一个 error: Unexpected '...' [misc]
钩子:
connectToDatabase()
这可确保在运行测试之前发生数据库连接。
,问题是无法读取 process.env.MONGODB。我需要添加 require("dotenv").config();在 connectToDatabase.ts 文件的顶部。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。