作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
类似于 Jest TypeError: is not a constructor in Jest.mock ,除非我使用的是 ES6 导入 - 并且对该问题的答案不适用于我的情况。
关注 the Jest .mock()
documentation我试图模拟构造函数 Client
来自 pg
模块。
我有一个构造函数,Client
, 从名为 pg
的 ES6 模块导入. Client
的实例应该有 query
方法。
import { Client } from "pg";
new Client({ connectionString: 'postgresql://postgres:postgres@localhost:5432/database' });
export async function doThing(client): Promise<string[]> {
var first = await client.query('wooo')
var second = await client.query('wooo')
return [first, second]
}
__tests__/test.ts
const log = console.log.bind(console)
jest.mock("pg", () => {
return {
query: jest
.fn()
.mockReturnValueOnce('one')
.mockReturnValueOnce('two'),
};
});
import { Client } from "pg";
import { doThing } from "../index";
it("works", async () => {
let client = new Client({});
var result = await doThing(client);
expect(result).toBe(['one', 'two'])
});
const mockDbClient = new Client({ connectionString: env.DATABASE_URL });
TypeError: pg_1.Client is not a constructor
__esModule: true
is required when using default exports , 但是
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')
}))
}));
关于javascript - Jest.mock 中的 ES6 导入和 'is not a constructor',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61822474/
我是一名优秀的程序员,十分优秀!