如何在打字稿节点项目中配置jest-mongodb(@ shelf / jest-mongodb)?

时间:2019-12-12 05:02:53

标签: javascript node.js typescript jestjs

我正在进行集成测试,因此从数据库中获取数据会使测试用例的执行速度变慢。尝试与jest-mongodb建立临时数据库。但找不到在typescript-nodejs项目中设置jest-mongodb的适当文档。请帮助我克服这个问题。

4 个答案:

答案 0 :(得分:0)

Jest MongoDB提供了使用MongoDB运行测试所需的所有配置。 Described Here

首先,您需要安装@ shelf / jest-mongodb,

yarn add @shelf/jest-mongodb --dev

然后在Jest配置中指定预设:

{
  "preset": "@shelf/jest-mongodb"
}

然后开始编写测试。就像:

const {MongoClient} = require('mongodb');

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

  beforeAll(async () => {
    connection = await MongoClient.connect(global.__MONGO_URI__, {
      useNewUrlParser: true,
    });
    db = await connection.db(global.__MONGO_DB_NAME__);
  });

  afterAll(async () => {
    await connection.close();
    await db.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);
  });
});

无需加载任何依赖项。请参阅GitHub上的Jest-MongoBD Documentation

[如果对您有帮助,请投票回答此问题]

答案 1 :(得分:0)

创建文件:typings/global.d.ts

declare namespace NodeJS {
  export interface Global {
    __MONGO_URI__: string;
  }
}

然后,在您的tsconfig.json中:

{
  "compilerOptions": { ... },
  "include": ["./src/**/*", "./typings/*"]
}

答案 2 :(得分:0)

进行此设置的一种方法如下:

通过Babel使用TypeScript配置Jest:

yarn add --dev babel-jest @babel/core @babel/preset-env @babel/preset-typescript

然后在您的babel配置中,您将拥有:

// babel.config.js
 module.exports = {
  presets: [
    ["@babel/preset-env", { targets: { node: "current" } }],
    "@babel/preset-typescript"
  ]
};

您可以在Jest TypeScript support via Babel

中找到文档

最后将@ shelf / jest-mongodb添加到jest.config.js中

// jest.config.js
module.exports = {
  preset: "@shelf/jest-mongodb",
  verbose: true
};

现在你很好。在测试文件中,您可以通过以下方式访问测试数据库的URL:

process.env.MONGO_URL

const globalAny: any = global;
globalAny.__MONGO_URI__

答案 3 :(得分:0)

好像@shelf/jest-mongodb删除了公开的全局变量,而是将其替换为单个环境变量。方便地,这解决了声明全局类型的需要。

来自https://github.com/shelfio/jest-mongodb#readme

const {MongoClient} = require('mongodb');

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

  beforeAll(async () => {
    connection = await MongoClient.connect(process.env.MONGO_URL, { // <= MONGO_URL env var set
      useNewUrlParser: true,
      useUnifiedTopology: true
    });
    db = await connection.db(); // <= env var (presumably) includes the db so no longer need to pass this
  });

  afterAll(async () => {
    await connection.close();
  });
});

因此,无需修改您的tsconfig.json配置即可支持此操作。

相关问题