我正在进行集成测试,因此从数据库中获取数据会使测试用例的执行速度变慢。尝试与jest-mongodb建立临时数据库。但找不到在typescript-nodejs项目中设置jest-mongodb的适当文档。请帮助我克服这个问题。
答案 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
配置即可支持此操作。