我正在进行一些单元测试,并希望测试这些基本的东西。在我的测试中我使用Illuminate\Foundation\Testing\WithoutEvents
。
当用户注册他或她获得激活邮件时。首先我使用了Observer,但得出的结论是,当使用WithoutEvents
作为here和here时,Laravel不会禁用观察者。然后我将我的代码更改为“传统”事件和听众。
EventServiceProvider仍然是默认值,$listen
属性除外:
/**
* The event listener mappings for the application.
*
* @var array
*/
protected $listen = [
'App\Events\UserCreated' => [
'App\Listeners\CreateActivation'
],
];
当我发送活动时:
event(new UserCreated($user));
示例测试(失败):
class ExampleTest extends TestCase
{
use DatabaseMigrations, WithoutEvents;
public function testExample()
{
$user = factory(User::class)->create();
}
}
错误:
我不知道为什么它会崩溃。因为我不确定问题出在哪里。
答案 0 :(得分:0)
正如之前在问题中所述,WithoutEvents
并未禁用观察者。正如您在错误中看到的那样,问题不在于UserObserver
或任何事件,而在于Sluggable包。该软件包也有一个观察者,这就产生了错误。
而不是$user = factory(User::class)->create();
我在tests/TestCase.php
中创建了一个函数,它创建了一个像这样的激活用户:
public function activatedUser($attributes = [])
{
$user = factory(User::class)->create($attributes);
DB::table('activations')->where('user_id', $user->id)->delete();
return $user;
}
现在,在测试中,您可以创建激活的用户:$user = $this->activatedUser();