【问题标题】:Does Laravel 6 disable observers in factories / tests?Laravel 6 是否在工厂/测试中禁用观察者?
【发布时间】:2020-05-28 04:00:31
【问题描述】:

我刚刚写了一个观察者,只要创建一个用户就会发送一封电子邮件。

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 是否以及在何处禁用我的观察者。

【问题讨论】:

    标签: laravel testing phpunit


    【解决方案1】:

    不,您必须使用 Model::withoutEvents() 自己禁用它

    例如:

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

    同样在这种特殊情况下你也可以使用 Laravel 自己提供的Mail fake system

    【讨论】:

    • 我在任何地方都没有那条线,并且在我运行 phpunit 时没有在 mailtrap 中收到任何电子邮件。
    • 运行测试时是否有 .env.testing 文件或不同的 .env 文件?
    • 我只有一个环境。在 phpunit.xml 中,我将 'APP_ENV' 设置为测试并在内存数据库中创建一个 sqlite。
    • 如果在特定测试期间您在created 方法中dd 会发生什么?你能做到吗?
    • 向观察者添加了 dd("hello")。 phpunit --filter an_admin_can_view_all_clients 返回 "hello" 邮件陷阱中没有电子邮件
    猜你喜欢
    • 2020-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-23
    • 2020-06-01
    相关资源
    最近更新 更多