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

使用@shelf/jest-mongodb编写MongoDB的Jest测试报错如何解决

问题原因分析
  • 全局MongoDB环境变量未注入:@shelf/jest-mongodb预设需要配套根目录下的配置文件才能正常启动内存MongoDB实例,很多用户会遗漏该配置,导致global.__MONGO_URI__和global.__MONGO_DB_NAME__两个全局变量未被注入,连接时读取到undefined值就会触发match方法调用报错。
  • API调用错误:MongoDB 4.x版本中只有MongoClient连接实例有close方法,db实例本身没有该方法,你写的await db.close()本身就是无效调用。
  • 版本兼容问题:你当前使用的@shelf/jest-mongodb@2.x对mongodb@4.x的支持存在缺陷,容易出现实例启动失败的问题。
修复步骤
  1. 在项目根目录新增jest-mongodb-config.js配置文件,内容如下:
module.exports = {
  mongodbMemoryServerOptions: {
    instance: {
      dbName: 'jest'
    },
    binary: {
      version: '4.0.3', // 可和你本地使用的MongoDB大版本保持一致
      skipMD5: true
    },
    autoStart: false
  }
};
  1. 调整db.test.js代码,修正无效调用:
const {MongoClient} = require('mongodb');

describe('insert', () => {
  let connection;
  let db;

  beforeAll(async () => {
    if (!global.__MONGO_URI__) {
      throw new Error('MongoDB测试实例未正常启动,请检查配置');
    }
    // MongoDB 4.x默认开启useNewUrlParser,无需额外传参
    connection = await MongoClient.connect(global.__MONGO_URI__);
    db = connection.db(global.__MONGO_DB_NAME__);
  });

  afterAll(async () => {
    // 仅关闭连接实例即可,无需调用db.close
    await connection.close();
  });

  it('should insert a doc into collection', async () => {
    const users = db.collection('users');

    const mockUser = {_id: 'some-user-id', name: 'John'};
    await users.insertOne(mockUser);

    const insertedUser = await users.findOne({_id: 'some-user-id'});
    expect(insertedUser).toEqual(mockUser);
  });
});
  1. 如果调整后仍报错,可使用兼容版本组合:删除node_modules和package-lock.json,将package.json的依赖调整为以下版本后重新执行npm install即可。
{
  "scripts": {
    "test": "jest"
  },
  "devDependencies": {
    "@shelf/jest-mongodb": "^3.0.0",
    "jest": "^28.0.0"
  },
  "dependencies": {
    "mongodb": "^4.13.0"
  },
  "jest": {
    "preset": "@shelf/jest-mongodb"
  }
}

内容的提问来源于stack exchange,提问作者learningtech

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:15:03