9
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

WordPressでメールの送信のユニットテスト

Last updated at Posted at 2017-10-25

たとえば何らかのメールを送信する WordPress プラグインを開発する際に、WordPressの wp_mail() で意図した通りのメールが送信されているかどうかを、ユニットテストで確認するには以下のように tests_retrieve_phpmailer_instance() を使用する。

wp_mail() の後に tests_retrieve_phpmailer_instance() を実行するというのがなんだか謎だけど WordPress 本体でのユニットテストもそうなってるので間違いではないです。

class WP_Multibyte_Patch_Test extends WP_UnitTestCase
{
	/**
	 * `wp_mail` should encode as expected
	 */
	public function test_wp_mail_should_be_sent_as_iso_2022_jp()
	{
		$to = 'hello@example.com';
		$subject = "こんにちは";
		$message = "日本語のメール";
	
		wp_mail( $to, $subject, $message );
	
		// テスト用のインスンタンスを作成
		$mailer = tests_retrieve_phpmailer_instance();
	
		// 送信先メールの確認
		$this->assertSame( 'hello@example.com', $mailer->get_recipient( 'to' )->address );
	
		// wp-multibyte-patchが有効化されている場合 ISO-2022-JP でエンコードされている
		$this->assertSame(
			"=?ISO-2022-JP?B?GyRCJDMkcyRLJEEkTxsoQg==?=",
			$mailer->get_sent()->subject
		);
	
		$this->assertSame(
			"こんにちは",
			iconv_mime_decode( $mailer->get_sent()->subject, 0, 'UTF-8' )
		);
	
		$this->assertSame(
			"日本語のメール\n",
			mb_convert_encoding( $mailer->get_sent()->body, 'UTF-8', 'ISO-2022-JP' )
		);
	}
}
9
4
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
9
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?