Laravel 测试:模型工厂不会触发注册事件

Pat*_*cke 2 phpunit laravel

我已经使用 Laravel 5.7 有一段时间了,但是,我对 TDD 完全陌生。

如果创建了用户模型,register则会触发一个事件。但是为什么当我使用工厂创建用户模型时它没有被触发?

我的工厂:

$factory->define(App\User::class, function (Faker $faker) {
    return [
        'first_name' => $faker->name,
        'sur_name' => $faker->name,
        'phone' => $faker->phoneNumber,
        'birthday' => Carbon::now()->subYears(25)->toDateTimeString(),
        'gender' => 'm',
        'email' => $faker->unique()->safeEmail,
        'password' => '$2y$10$TKh8H1.PfQx37YgCzwiKb.KjNyWgaHb9cbcoQgdIVFlYg7B77UdFm', // secret
        'remember_token' => str_random(10),
    ];
});
Run Code Online (Sandbox Code Playgroud)

和我的测试,失败了:

public function test()
{

    $this->withoutExceptionHandling();

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

    Event::assertDispatched(Registered::class);

}
Run Code Online (Sandbox Code Playgroud)

Tra*_*itz 5

当使用 Laravel 提供的 auth 脚手架时,Registered 事件由控制器调度(特别register()是Illuminate\Foundation\Auth\RegistersUserstrait 中的方法。由于您不是通过控制器发出请求,因此它不会调度事件。