如何解决在Node.JS中使用Jest模拟/存根类
我有一个可以发送如下所示的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)
我要去哪里错了?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。