例として@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();