Javascript ES6导入并且在Jest.mock中“不是构造函数”

Javascript ES6导入并且在Jest.mock中“不是构造函数”,javascript,typescript,jestjs,Javascript,Typescript,Jestjs,类似于,除了我使用的是ES6导入,而这个问题的答案并不适用于我的情况 接下来,我尝试从pg模块模拟构造函数客户端 我有一个构造函数Client,它是从一个名为pg的ES6模块导入的。Client的实例应该有一个查询方法 这与中给出的答案类似,但在这里失败了 代码,只是: const mockDbClient=新客户端{connectionString:env.DATABASE_URL} 在以下情况下失败: TypeError:pg_1.Client不是构造函数 我注意到了,但客户端不是我检查过的

类似于,除了我使用的是ES6导入,而这个问题的答案并不适用于我的情况

接下来,我尝试从pg模块模拟构造函数客户端

我有一个构造函数Client,它是从一个名为pg的ES6模块导入的。Client的实例应该有一个查询方法

这与中给出的答案类似,但在这里失败了

代码,只是:

const mockDbClient=新客户端{connectionString:env.DATABASE_URL}

在以下情况下失败:

TypeError:pg_1.Client不是构造函数

我注意到了,但客户端不是我检查过的pg的默认导出

如何使构造函数正常工作

得到答案后的一些附加注释 这里有一个略长的答案,每一行都有关于发生了什么的评论——我希望阅读本文的人会觉得它有用

jest.mock("pg", () => {
  // Return the fake constructor function we are importing
  return {
    Client: jest.fn().mockImplementation(() => {
      // The consturctor function returns various fake methods
      return {
        query: jest.fn()
          .mockReturnValueOnce(firstResponse)
          .mockReturnValueOnce(secondResponse),
        connect: jest.fn()
      }
    })
  }
})

模拟模块时,它需要具有与实际模块相同的形状。更改:

jest.mock("pg", () => {
  return {
    query: jest
      .fn()
      .mockReturnValueOnce('one')
      .mockReturnValueOnce('two'),
  };
});
…致:

jest.mock("pg", () => ({
  Client: jest.fn().mockImplementation(() => ({
    query: jest.fn()
      .mockReturnValueOnce('one')
      .mockReturnValueOnce('two')
  }))
}));

模拟模块时,它需要具有与实际模块相同的形状。更改:

jest.mock("pg", () => {
  return {
    query: jest
      .fn()
      .mockReturnValueOnce('one')
      .mockReturnValueOnce('two'),
  };
});
…致:

jest.mock("pg", () => ({
  Client: jest.fn().mockImplementation(() => ({
    query: jest.fn()
      .mockReturnValueOnce('one')
      .mockReturnValueOnce('two')
  }))
}));

谢谢雅各布!我学到的是1。模拟实现必须是一个对象,我们要导入的内容作为键。2.回想起来,构造函数显然应该是一个函数。谢谢!我学到的是1。模拟实现必须是一个对象,我们要导入的内容作为键。2.回想起来,构造函数显然应该是一个函数。