LoginSignup
1
1

More than 1 year has passed since last update.

【Jest】名前付きインポートしたクラスとそのメソッドをそれぞれモック化する

Posted at

例として@slack/webhookパッケージを使ってslackにメッセージを送るコードをテストする。

// IncomingWebhookクラスを名前付きインポートして 
import { IncomingWebhook } from '@slack/webhook';

const webHookUrl = 'https://hooks.slack.com/services/~'

// 1. IncomingWebhookをインスタンス化して
const webhook = new IncomingWebhook(webHookUrl);

// 2. sendメソッドで通知を送る
webhook.send({
  text: 'メッセージ内容',
});

1,2をテストするために、名前付きインポートしたクラスとsendメソッドをそれぞれモック化する。

import { IncomingWebhook } from '@slack/webhook';

const mockSend = jest.fn();

jest.mock('@slack/webhook', () => ({
  IncomingWebhook: jest.fn(() => ({ send: mockSend })),
}));

下のようなマッチャでテストできる。

// IncomingWebhookが1回インスタンス化された
expect(IncomingWebhook).toHaveBeenCalledTimes(1);

// sendメソッドが1回実行された
expect(mockSend).toHaveBeenCalledTimes(1);

メソッドだけでいいなら

sendメソッドだけモック化するなら下のようにも書ける

import { IncomingWebhook } from '@slack/webhook';

const mockSend = jest
  .spyOn(IncomingWebhook.prototype, 'send')
  .mockImplementation();
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1