在Node.JS中使用Jest模拟/存根类

时间:2020-08-18 09:51:24

标签: node.js mocking jestjs

我有一个可以发送如下所示的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)

我要去哪里错了?

0 个答案:

没有答案
相关问题