Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在typescript节点项目中配置jest mongodb(@shelf/jest mongodb)?_Javascript_Node.js_Typescript_Jestjs - Fatal编程技术网

Javascript 如何在typescript节点项目中配置jest mongodb(@shelf/jest mongodb)?

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一起设置临时数据库。但在typescript nodejs项目中找不到用于设置jest mongodb的适当文档。请帮助我克服这个问题

ts(基于此测试套件的db配置文件连接到db)


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__