Node.js CRUD应用测试异常:测试环境读取非测试数据库内容
Node.js EJS CRUD测试异常:res.text未加载测试数据库内容
我正在为基于EJS视图引擎的Node.js CRUD应用编写测试,预期res.text能显示测试前存入测试数据库的内容,但实际却显示了非测试库的内容。
测试代码(test.js)
// test.js const chai = require('chai'); const chaiHttp = require('chai-http'); chai.use(chaiHttp); const { app, mongooseConnection } = require("./app.js"); const blogSchema = require("./models/blog"); const Blog = mongooseConnection.model("Blog", blogSchema); let testBlogsArray; before(async () => { try { testBlogsArray = []; for (let i = 0; i < 3; ++i) { const testBlog = new Blog({ title: `TEST title ${i + 1}`, snippet: `TEST snippet ${i + 1}`, body: `TEST body ${i + 1}`, }); testBlogsArray.push(await testBlog.save()); } } catch (error) { console.log(error); } }); after(async () => { try { for (const key in mongooseConnection.collections) { await mongooseConnection.collections[key].deleteMany({}); } await mongooseConnection.dropDatabase(); await mongooseConnection.close(); testBlogsArray = null; } catch (error) { console.log(error); } }); describe("GET /", () => { it("should get all blogs from the test database", (done) => { chai .request(app) .get("/blogs") .end((err, res) => { console.log(app.locals.settings.env) // 输出'test' console.log(res.text) // 渲染开发环境视图,显示非测试库内容 res.text.should.match(/all blogs/i); res.text.should.match(/test title 1/i); // 测试失败 done(); }); }); });
环境配置
app.js中的数据库配置
const dbURI = process.env.NODE_ENV === 'test' ? process.env.TEST_MONGO_URI : process.env.MONGO_URI; const mongooseConnection = mongoose.createConnection(dbURI, { useNewUrlParser: true, useUnifiedTopology: true, });
package.json中的测试脚本
// package.json {... "scripts": { "test": "NODE_ENV=test mocha", } ...}
已完成的排查
- 在测试的
end()块中打印app.locals.settings.env,结果为'test'; - 运行测试时打印
dbURI,显示为测试数据库地址; - 移除
after()中的清理代码后,确认测试数据已成功存入测试数据库。
内容的提问来源于stack exchange,提问作者marijak
相关产品推荐
相关产品推荐

