使用Jest测试Babel-node Express应用程序时出现猫鼬错误

时间:2020-06-26 17:21:28

标签: node.js mongoose jestjs supertest

这是我的Jest配置:

  "jest": {
    "testEnvironment": "node",
    "coveragePathIgnorePatterns": [
      "/node_modules/"
    ]
  },

这是我的测试

import request from 'supertest';
import { myapp } from '../src/index';

describe('Post Endpoints', () => {
  it('should run api root', async () => {
    const res = await request(myapp).get('/api/v1');
    expect(res.statusCode).toEqual(200);
    expect(res.body).toHaveProperty('version');
  });
});

这是我的http服务器(express应用)的最后几行,在测试环境中监听3000:

...
import './mongodb';
...
if (process.env.NODE_ENV === 'production') server.listen(800 + process.env.NODE_APP_INSTANCE);
else if (process.env.NODE_ENV === 'test') server.listen(300 + process.env.NODE_APP_INSTANCE);
else server.listen(80, () => logger.info('? Single core development server started on 80.'));

export { server, myApp };

这是我的猫鼬文件:

import mongoose, { mongo } from 'mongoose';
import { mongodbURL, mongodbURLdev, mongodbURLdevRemote, mongodbURLtest, debugMode } from '../config/config.json';
import logger from '../lib/logger';

mongoose.Promise = global.Promise;
let env = process.env.NODE_ENV;

mongoose.set(`debug`, debugMode || env === 'production' ? false : true);

let dbURL =
  env === 'production'
    ? mongodbURL
    : env === 'development'
    ? mongodbURLdev
    : env === 'developmentRemote'
    ? mongodbURLdevRemote
    : mongodbURLtest;
try {
  mongoose.connect(dbURL, {
    useNewUrlParser: true,
    useCreateIndex: true,
    useUnifiedTopology: true
  });
} catch (e) {
  mongoose.createConnection(dbURL, { useNewUrlParser: true, useCreateIndex: true, useUnifiedTopology: true });
}

mongoose.connection
  .once('open', () => env !== 'production' && logger.info(`MongoDB is running in ${env} mode.`))
  .on('error', e => {
    logger.error('error on connect to mongo db.');
  });

但是当我运行cross-env NODE_ENV=test NODE_APP_INSTANCE=0 jest --testTimeout=10000

路由器测试通过,但猫鼬会出错:

/node_modules/mongoose/lib/utils.js:422
        throw err;
        ^
TypeError: clone is not a function
    at format (/node_modules/mongoose/lib/drivers/node-mongodb-native/collection.js:287:11)
    at NativeCollection.$format (/node_modules/mongoose/lib/drivers/node-mongodb-native/collection.js:253:10)

1 个答案:

答案 0 :(得分:0)

我发现启用猫鼬调试模式是否会发生此错误。