Laravelで作成したフォーム画面から名前とメールアドレスの入力が完了したら、完了メールを送信するようにしています。
ブラウザで入力した際はmailtrapで確認できたのですが、テストコードをを実行すると下記のようなエラーが出てしまい解決策が分からないのでこちらに投稿させていただきます。
mailableがうまく使えていないのかなと思うのと、DB周りでも何か問題があるのかもしれませんが原因が特定できません。
There was 1 failure: 1) Tests\Feature\FormTest::testComplete The expected [App\Mail\CustomerSent] mailable was sent 0 times instead of 1 times. Failed asserting that 0 is identical to 1. /var/www/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/MailFake.php:81 /var/www/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/MailFake.php:53 /var/www/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:261 /var/www/tests/Feature/FormTest.php:68 FAILURES! Tests: 6, Assertions: 7, Failures: 1.
テストコードも色々と試しましたがどれもうまくいきませんでした。汚くてすみません。
public function testComplete() { // $response = $this->get('/app') // ->type('test_user', 'name') // ->type('test@sample.com', 'email') // ->press('登録する') // ->assertRedirect('/app/confirm'); Mail::fake(); $email = 'test@sample.com'; $data = [ 'name' => 'test_user', 'email' => $email ]; Mail::assertSent(FormSent::class, 1); // Mail::assertSent(Approved::class, function ($mail) { // return $mail->hasTo('test@sample.com'); // }); // Mail::assertSent(FormSent::class); Mail::assertSent(FormSent::class, function ($mail) use ($email) { // $mail->build(); return $mail->to[0]['addres'] === $email; } ); Mail::assertNotSent(Denied::class); // Mail::assertSent(CustomerSent::class, function ($mail) { // $mail->build(); // return $mail->hasTo('test@sample.com'); // }); }
.envと.env.testingのメール部分は同一です
MAIL_MAILER=smtp MAIL_HOST=smtp.mailtrap.io MAIL_PORT=2525 MAIL_USERNAME=hoge MAIL_PASSWORD=huga MAIL_ENCRYPTION=tls MAIL_FROM_ADDRESS=sample@sample.com MAIL_FROM_NAME="${APP_NAME}"
phpunitは下記です。
php
1<php> 2 <env name="APP_ENV" value="testing"/> 3 <server name="BCRYPT_ROUNDS" value="4"/> 4 <server name="CACHE_DRIVER" value="array"/> 5 <env name="DB_CONNECTION" value="mysql" force="true"/> 6 <!-- <server name="DB_DATABASE" value=":memory:"/> --> 7 <server name="MAIL_MAILER" value="array"/> 8 <server name="QUEUE_CONNECTION" value="array"/> 9 <server name="SESSION_DRIVER" value="array"/> 10 <server name="TELESCOPE_ENABLED" value="false"/> 11 <!-- <server name="DB_DATABASE" value="test-db" force="true"/> --> 12 </php>

回答1件
あなたの回答
tips
プレビュー