You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 17:07:29