Javascript 如何在typescript节点项目中配置jest mongodb(@shelf/jest mongodb)?
我正在进行集成测试,所以从数据库获取数据会使测试用例的执行变慢。尝试与jest mongodb一起设置临时数据库。但在typescript nodejs项目中找不到用于设置jest mongodb的适当文档。请帮助我克服这个问题 ts(基于此测试套件的db配置文件连接到db)Javascript 如何在typescript节点项目中配置jest mongodb(@shelf/jest mongodb)?,javascript,node.js,typescript,jestjs,Javascript,Node.js,Typescript,Jestjs,我正在进行集成测试,所以从数据库获取数据会使测试用例的执行变慢。尝试与jest mongodb一起设置临时数据库。但在typescript nodejs项目中找不到用于设置jest mongodb的适当文档。请帮助我克服这个问题 ts(基于此测试套件的db配置文件连接到db) Jest MongoDB提供了使用MongoDB运行测试所需的所有配置。 首先需要安装@shelf/jest mongodb yarn add @shelf/jest-mongodb --dev 然后在Jest配置中指
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
[如果这个答案对你有帮助,一定要投票支持它]创建文件:
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"
]
};
你可以在这里找到文件
最后将@shelf/jest mongodb添加到jest.config.js中
// jest.config.js
module.exports = {
preset: "@shelf/jest-mongodb",
verbose: true
};
现在你可以走了。在测试文件中,您可以通过以下方式访问测试数据库URL:
process.env.MONGO_URL
或
看起来
@shelf/jest mongodb
删除了公开的全局变量,并用单个环境变量替换了它们。这很方便,可以解决声明全局键入的需要
发件人:
const{MongoClient}=require('mongodb');
描述('插入',()=>{
让连接;
让db;
之前(异步()=>{
connection=wait MongoClient.connect(process.env.MONGO_URL,{//嘿,我参考了文档并用javascript代码实现。它工作正常,测试用例通过。但是当尝试使用typescript MONGO_DB_NAME时会出现错误。请清楚地阅读问题并回答。如果您提供一些示例代码而不是复制粘贴文档,这将非常有用。问题是关于typescrip的t和global.\uu MONGO*
变量,这些变量是由@shelf/jest mongodb
注入的,而不仅仅是关于如何使用模块。嘿,我已经更新了问题中的配置文件,你能给出一些详细的答案,以便我能清楚地理解。不要破坏你的帖子。在这个网站上发布,你已经不可撤销了ly授予Stack Exchange网络在其认为合适的时间内根据分发该内容的权利。有关删除的替代方法,请参阅:
process.env.MONGO_URL
const globalAny: any = global;
globalAny.__MONGO_URI__