簡體   English   中英

如何在 typescript-node 項目中配置 jest-mongodb(@shelf/jest-mongodb)?

[英]How to configure jest-mongodb(@shelf/jest-mongodb) in typescript-node project?

我正在進行集成測試,因此從數據庫獲取數據會使測試用例執行速度變慢。 嘗試使用 jest-mongodb 設置臨時數據庫。 但找不到在 typescript-nodejs 項目中設置 jest-mongodb 的正確文檔。 請幫我解決這個問題。

test.ts(基於此測試套件的數據庫配置文件連接到數據庫)

export default {    
    jwtPrivateKey: 'secretkey',
    // Testing Database configuration
    MongoDB: {
        dbConfig: {
            user: 'user name',
            host: 'some host',
            port: 'some port',
            authMechanism: 'some mechanism',
            authSource: 'access level',
            dbName: 'database name',
            metadata: 'initializer'
        }
    }
};

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

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

然后,在您的tsconfig.json

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

進行此設置的一種方法如下:

通過 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__

看起來@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配置來支持這一點。

Jest MongoDB 提供了使用 MongoDB 運行測試所需的所有配置。 此處描述

首先你需要安裝@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文檔

[請投票給這個答案,如果它對你有幫助]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM