Laravel Mail :: assertQueued BadMethodCallException - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь написать Laravel тест PHPUnit, который проверяет, была ли почта помещена в очередь после создания пользователя.

<?php

namespace Tests\Unit\User;

use App\User;
use Tests\TestCase;
use App\Notifications\UserCreated;
use Illuminate\Support\Facades\Mail;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Support\Facades\Notification;
use Illuminate\Foundation\Testing\RefreshDatabase;

class UserUnitTest extends TestCase
{
    use RefreshDatabase;

    /**
     * check if a user was created in database
     *
     * @return void
     */
    public function testUserCreate()
    {
        $user = factory(User::class)->create();

        $this->assertDatabaseHas('users', [
            'email'             => $user->email,
            'active'            => 0,
            'activation_token'  => $user->activation_token,
            'deleted_at'        => NULL
        ]);
    }

    /**
     * check if email was sent after user was created in database
     *
     * @return void
     */
    public function testEmailSentAfterUserCreated()
    {
        Notification::fake();

        // Assert that no notifications were sent...
        Notification::assertNothingSent();

        $user = factory(User::class)->create();

        // Assert a notification was sent to the given users...
        Mail::assertQueued(UserCreated::class, 1);
    }
}

Когда я запускаю этот тест testEmailSentAfterUserCreated выдает следующее исключение.

Произошла 1 ошибка:

1) Tests \ Unit \ User \ UserUnitTest :: testEmailSentAfterUserCreated BadMethodCallException: метод Illuminate \ Mail \ Mailer :: assertQueued делает не существует.

/ home / vagrant / Проекты / endiro / vendor / laravel / framework / src / Подсветка / Поддержка / Черты / Macroable. php: 103 / home / vagrant / Проекты / endiro / vendor / Laravel / Framework / SRC / Освещение / Поддержка / Фасады / Фасад. php: 245 /home/vagrant/Projects/endiro/tests/Unit/User/UserUnitTest.php:49

Класс Mail был включен, и я уверен, что аргументы верны, но я не уверен, почему я получаю эту ошибку.

Ответы [ 2 ]

0 голосов
/ 16 апреля 2020

Используйте Mail :: fake (), если вы хотите установить Mail :: assertQueued (). Я столкнулся с той же проблемой. Я забыл добавить Mail :: fake () в этом конкретном тестовом примере.

0 голосов
/ 16 января 2020

Уведомления не имеет очереди assert, у него есть assertSentTo (). Итак, пример того, как это должно выглядеть. Если уведомление может быть поставлено в очередь, я думаю, вы могли бы использовать Queue :: fake () для достижения этой цели.

Notification::assertSentTo(
    [$user], UserCreated::class
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...