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

Mocha运行测试时无法建立MongoDB Atlas数据库连接问题求助

问题根因
  • 运行Mocha测试时直接执行测试文件,没有引入server.js,所以server中调用的connectDB()逻辑完全没有触发,自然不会有数据库连接行为
  • connectDB是异步函数,原代码中没有等待连接完成就执行数据库操作,也会导致超时
  • 测试文件默认没有加载dotenv配置,会导致数据库连接串的环境变量缺失,即使添加连接逻辑也可能失败
修复步骤

1. 修正connection.js的异步逻辑

给mongoose.connect添加await,确保调用connectDB时可以等待连接完成:

const mongoose = require('mongoose');
const URI = `mongodb+srv://${process.env.DB_USERNAME}:${process.env.DB_PASSWORD}@betacluster.7jf4v.mongodb.net/servicenowclone?retryWrites=true&w=majority`

const connectDB = async () => {
  try {
    // 新增await等待连接完成
    await mongoose.connect(URI, {
      useUnifiedTopology: true,
      useNewUrlParser: true
    });

    mongoose.connection.once('open',function() {
      console.log('connection established');
    }).on('error',() => console.log('gi atay way connection sa database man'))

  } catch (err) {
    console.log(err)
  }

}

module.exports = connectDB;

2. 修正测试文件,添加连接钩子和环境变量加载

在测试执行前后添加数据库连接、断开的钩子,同时修正async和done混用的问题:

require('dotenv').config() // 加载环境变量
const mocha = require('mocha');
const assert = require('assert');
const mongoose = require('mongoose');
const connectDB = require('../DB/connection') // 引入数据库连接方法
const ticketInstance = require('../models/ticket')

//describe tests
describe('saving a ticket', function () {
  // 所有测试执行前先连接数据库
  before(async function() {
    // 延长超时时间,避免MongoDB Atlas公网连接慢导致超时
    this.timeout(10000);
    await connectDB();
  })

  // 所有测试执行后断开数据库连接
  after(async function() {
    await mongoose.connection.close();
  })

  it('create ticket', async function () {
    // 直接用async/await语法,无需混用done回调
    const newTicket = new ticketInstance({
      number: 1,
      type: 'Request',
      customer: 'Carlo Principe',
      description: 'first ticket created from a test',
      subject:'test subject'
    })

    await newTicket.save();
    assert(newTicket.isNew === false);
  });
})
额外注意事项
  • 运行测试前确认.env文件在项目根目录,包含正确的DB_USERNAME和DB_PASSWORD配置
  • 如果测试还是超时,可以适当调整before钩子的timeout时长,MongoDB Atlas的公网连接偶尔会有延迟

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 05:18:03