ssh*_*h98 4 node.js typescript jestjs
我有两个文件,其中一个是我初始化 slack Web API 客户端、发布一条消息,并根据模拟值对其进行测试:
main.ts:
import { WebClient } from '@slack/web-api';
const slack = new WebClient(process.env.SLACK_API_KEY as string);
slack.chat.postMessage({...});
Run Code Online (Sandbox Code Playgroud)
test.ts
import { WebClient } from '@slack/web-api';
let slack: WebClient;
beforeAll(async () => {
slack = new WebClient();
});
jest.mock('@slack/web-api', () => {
return {
chat: jest.fn(),
postMessage: jest.fn(),
};
});
describe('test', () => {
it("tests slack message", async () => {
expect(slack.chat.postMessage).toBeCalledWith({...});
})
})
Run Code Online (Sandbox Code Playgroud)
问题是当我运行此代码时出现以下错误:TypeError: web_api_1.WebClient is not a constructor
我尝试了各种不同的方法,包括模拟模块、使用esModule: true而不是定义 WebClient。我的问题是我做错了什么?
您没有正确模拟@slack/web-api包和WebClient构造函数。
此外,您忘记导入main.ts模块。
例如
\nmain.ts:
import { WebClient } from '@slack/web-api';\nconst slack = new WebClient(process.env.SLACK_API_KEY as string);\n\nslack.chat.postMessage({\n text: 'Hello world!',\n channel: '123',\n});\nRun Code Online (Sandbox Code Playgroud)\nmain.test.ts:
import { WebClient } from '@slack/web-api';\nimport './main';\n\njest.mock('@slack/web-api', () => {\n const mSlack = {\n chat: {\n postMessage: jest.fn(),\n },\n };\n return { WebClient: jest.fn(() => mSlack) };\n});\n\ndescribe('test', () => {\n let slack: WebClient;\n beforeAll(() => {\n slack = new WebClient();\n });\n it('tests slack message', async () => {\n expect(slack.chat.postMessage).toBeCalledWith({ text: 'Hello world!', channel: '123' });\n });\n});\nRun Code Online (Sandbox Code Playgroud)\n单元测试结果:
\n PASS examples/66991895/main.test.ts (7.253 s)\n test\n \xe2\x9c\x93 tests slack message (2 ms)\n\nTest Suites: 1 passed, 1 total\nTests: 1 passed, 1 total\nSnapshots: 0 total\nTime: 8.245 s\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
3675 次 |
| 最近记录: |