LoginSignup
1
1

More than 1 year has passed since last update.

CodeceptJSとPuppeteerでE2Eテスト(MailSlurp)

Posted at

初めに

前回の記事の続きです。今回はメールのテストをしてみました。
公式を参考にMailSlurpヘルパーを用いて動かします。
未解決な部分も残っていますが一旦まとめました。

目次

  • MailSlurpとは
  • MailSlurpヘルパーの導入
    • わかってないけどとりあえず公式の通りに
  • コードを書く
    • コード
    • 詳細
    • 疑問
  • 終わり
  • 参考

MailSlurpとは

MailSlurpとは(MailSlurp公式サイトより引用)

MailSlurpは、開発者とQAテスター向けに構築されたEメールAPIです。オンデマンドで実際の電子メールアドレスを作成し、コード、テスト、またはオンラインダッシュボードから電子メールを送受信できます。

MailSlurpは電子メールをテストするために設計されたサービスです。
個人で利用する分には無料で使うことができます。

CodeceptJSで用意されているプラグイン(MailSlurpヘルパー)をインストールすることで簡単に利用できます。
CodeceptJSのMailSlurpヘルパーの詳細はこちらです。(以下引用)

MailSlurpサービスを使用して電子メールをテストするためのMailSlurpヘルパー。MailSlurpは、テストごとに使い捨てのメールボックスを作成し、テスト後に削除します。

MailSlurpヘルパーの導入

公式の手順通りにインストールしていきます。
MailSlurpでアカウントを作成、登録したメールの確認、と進むとMailSlurpにAPIキーが表示されるので保存しておきます。

次にnpmからmailslurpヘルパーをインストール、codecept.conf.jsへ追記をしていきます。

npm i @codeceptjs/mailslurp-helper --save-dev
//codecept.conf.js

helpers: {
    Puppeteer: {
      //省略
    },
    MailSlurp: {
      require: '@codeceptjs/mailslurp-helper',
      apiKey: 'xxxxxxxxxxxxxxxxxxxxxx' 
      // MailSlurpでコピーしたAPIキー
    },
  },

わかってないけどとりあえず公式の通りに

codecept.conf.jsへの追記後、TypeScript定義を再生成?するために以下のコマンドを打つようです。
正直よくわかっていませんが公式に習います。

npx codeceptjs def

コードを書く

ではコードを書いていきます。
今回はECサイトアプリの決済完了メールについてテストしていきます。
こちらのサイトを参考にしました。

①テスト用のダミーのアドレスから、MailSlurpでランダムに生成した試験用アドレスに変更
②試験用アドレスで注文処理
③試験用アドレスに送られたメール文面のテスト
④テスト後に試験用アドレスからダミーのアドレスに戻す

の流れでテストしました。
JUnit5のようにテスト後に実行、な関数がないか調べたのですが
使い方がよくわからなかったのでコードの最後に書いてアドレスを戻してます
(BeforeSuiteやAfterSuite関数?)

コード

Feature('メールテスト');

Scenario('test', async({ I }) => {
 // 試験用メールアドレス生成
  const mailbox = await I.haveNewMailbox();
  I.openMailbox(mailbox) //なくても動く?

  // 試験用メールアドレスに変更
  session('office', () => { 
    I.amOnPage('http://localhost:8080/');       //ログイン画面へ
    I.click('ログイン');                 //ログインする
    I.fillField('メールアドレス:', 'xxxxx');
    I.fillField('パスワード:', 'xxxxx');
    I.click('ログイン');                 //ログイン
    I.waitForText('dummy');              //トップ画面が表示されるまで待つ

    I.click('ユーザ情報詳細'); 
    I.click('ユーザ情報を変更する'); 
    I.fillField('メールアドレス:',mailbox.emailAddress); //試験用メールアドレスに変更
    I.click('更新');

    I.click('ログイン');                 //ログイン
    I.waitForText('dummy');              //トップ画面が表示されるまで待つ
  });

 //試験用メールアドレスでログイン、注文して決済完了メールを送る
  session('user', () => { 
    I.amOnPage('http://localhost:8080/'); 
    I.click('ログイン'); 
    I.fillField('メールアドレス:', mailbox.emailAddress); 
    I.fillField('パスワード:', 'xxxxx'); 
    I.click('ログイン'); 
    I.waitForText('dummy'); 

    I.click('ダミー商品');
    I.click('カートに入れる'); 
    I.click('注文に進む'); 
    I.click('この内容で注文する');
    I.waitForText('決済が完了しました!');
  });

  //メールを受信、内容をテストする
  const email = await I.waitForLatestEmail(30);  //最新メールを取得(30秒でタイムアウト)
  I.openEmail(email);
  I.seeEmailIsFrom('アプリから送られるアドレス');  //Fromチェック
  I.seeInEmailSubject('メール件名');        //件名チェック
  I.seeInEmailBody('メール本文');          //本文チェック

  //変更をもとに戻す
  session('after', () => { 
    I.amOnPage('http://localhost');
    I.click('ログイン');
    I.fillField('メールアドレス:', mailbox.emailAddress); 
    I.fillField('パスワード:', 'xxxxx'); 
    I.click('ログイン'); 
    I.waitForText('dummy'); 

    I.click('ユーザ情報詳細'); 
    I.click('ユーザ情報を変更する'); 
    I.fillField('メールアドレス:','xxxxx'); 
    I.click('更新');

    I.fillField('メールアドレス:','xxxxx'); 
    I.fillField('パスワード:', 'xxxxx');
    I.click('ログイン');
    I.waitForText('dummy');
  });

});

詳細

haveNewMailbox

新しいメールボックスを作成し、開きます。
複数のメールボックスを作成し切り替えるときにopenEmailを使います。

openEmail

メールボックスを選択して開きます。
例)I.openMailbox(mailbox1);

emailAddress

haveNewMailboxで作成されたメールボックスのランダムに生成されたアドレス

waitForLatestEmail

メールボックスから電子メールを返します。
待機時間はデフォルトで10秒、指定することも可能です。
例)I.waitForLatestEmail(30);

seeEmailIsFrom

電子メールが指定されたアドレスからのものであることを確認します。

seeInEmailSubject

現在の電子メールの件名にテキストが含まれていることを確認します。

seeInEmailBody

現在の電子メール本文にテキストが含まれていることを確認します。

疑問

MailSlurpについては詳しくないのですが、見たところ受信もできるようです。
文面のテストに加えてテスト時のメールを見ることができたら、と思ったのですが

MailSlurpは、テストごとに使い捨てのメールボックスを作成し、テスト後に削除します。

とMailSlurpヘルパーの説明にあります。削除となるとできないんでしょうか

MailSlurpの方で先にランダムアドレスを生成し、そのアドレスをコードの中に書くことでMailSlurpの受信トレイにテストメールを入れることはできましたが、無料プランだとアドレスに有効期限もあるそうですし、自動テスト的にもどうなのかと。

mailslurp-clientのほうを入れる必要が出てくるんでしょうか。まだ知識が足りないです。

終わり

MailSlurpヘルパーを用いてメールの文面の確認までテストをすることができました。

まだ良く分かっていない部分も多いですが、導入も簡単で分かりやすいのは魅力だと思います。

参考

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