Laravel 6 отключает наблюдателей на фабриках / тестах? - PullRequest
1 голос
/ 12 февраля 2020

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

class UserObserver
{
    public function created(User $user)
    {
         Mail::to($user)->send(new UserAccountCreated(
            app('auth.password.broker')->createToken($user),
            $user
        ));
    }
}

Я запустил phpunit, чтобы проверить, работает ли мой наблюдатель, и он прошел. Однако я ожидал, что получу электронное письмо каждый раз, когда мои тесты создают пользователя.

Например:

/** @test */
    public function an_admin_can_view_all_clients()
    {
        $user = factory(User::class)->create(['is_admin' => true]);
        $client = factory(Client::class)->create();
        $client2 = factory(Client::class)->create();

        $this->actingAs($user)->get(route('clients.index'))
            ->assertSuccessful()
            ->assertSee($client->name)
            ->assertSee($client2->name);
    }

Я ожидаю, что электронное письмо будет отправлено, когда этот завод создаст пользователя. Но я не получаю его в Mailtrap.

Просто интересно, если и где laravel отключает запуск моего наблюдателя, когда моя фабрика создает этого пользователя.

1 Ответ

0 голосов
/ 12 февраля 2020

Нет, вы должны отключить его самостоятельно, используя Model::withoutEvents()

Например:

$user = User::first();
User::withoutEvents(function () use ($user) {
    $user->delete();
});

Также в этом конкретном случае c вы также можете использовать Mail поддельная система , предоставляемая Laravel самой

...