[英]Error with jest config: “Preset @shelf/jest-mongodb not found.”
[英]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.