我有一个可以发送如下所示的Slack消息的类:
class SlackMessage {
constructor(email_address, message) {
this.email_address = email_address;
this.message = message;
this.slackClient = new WebClient(token);
}
async send() {
let user = await this.user();
return await this.slackClient.chat.postMessage({
channel: user.user.id,
text: message,
});
}
async user() {
return await this.slackClient.users.lookupByEmail({
email: email_address
});
}
}
我想模拟slackClient
,以便slackClient.users.lookupByEmail
返回一个已知值,并且我可以检查this.slackClient.chat.postMessage
是否以预期的args调用,但我不知道如何去做这个。我已经尝试过了(以及其他各种方法):
jest.mock("@slack/web-api");
describe("SlackMessage", () => {
beforeAll(() => {
WebClient.mockImplementation(() => {
return {
chat: {
postMessage: jest.fn(() => {
return Promise.resolve({})
})
},
users: {
lookupByEmail: jest.fn(() => {
return Promise.resolve({
user: {
id: "1234"
}
})
})
}
};
});
});
test("it sends a slack message", async () => {
message = new SlackMessage("foo@example.com", "Hello there!");
message.send()
expect(message.slackClient.users.lookupByEmail).toHaveBeenCalledWith({
email: "foo@example.com"
})
expect(message.slackClient.chat.postMessage).toHaveBeenCalledWith({
channel: "1234",
text: "Hello there!",
})
})
})
但这给了我错误:
expect(jest.fn()).toHaveBeenCalledWith(...expected)
Expected: {"email": "foo@example.com"}
Number of calls: 0
33 | message.send()
34 |
> 35 | expect(message.slackClient.users.lookupByEmail).toHaveBeenCalledWith({
| ^
36 | email: "foo@example.com"
37 | })
38 | expect(message.slackClient.chat.postMessage).toHaveBeenCalledWith({
at Object.<anonymous> (spec/slack_message.test.js:35:53)
我要去哪里错了?