Laravel 仅伪造特定事件don';拉威尔试验中的t工作
我正在我的项目中使用Spatial/laravel Slaggable包。我需要声明已发送事件。问题是当我在测试中伪造事件(Laravel 仅伪造特定事件don';拉威尔试验中的t工作,laravel,eloquent,laravel-testing,Laravel,Eloquent,Laravel Testing,我正在我的项目中使用Spatial/laravel Slaggable包。我需要声明已发送事件。问题是当我在测试中伪造事件(event::fake([AdvertPublished::class]))时,理论上只有我的AdvertPublished事件应该被伪造,但似乎pacakge事件也是伪造的,并且创建sluggenerateSlugOnCreate的方法从未执行过,这会导致sql错误,因为我的slug字段不能为null Event::fake([AdvertPublished::class
event::fake([AdvertPublished::class])
)时,理论上只有我的AdvertPublished事件应该被伪造,但似乎pacakge事件也是伪造的,并且创建sluggenerateSlugOnCreate
的方法从未执行过,这会导致sql错误,因为我的slug字段不能为null
Event::fake([AdvertPublished::class]);
$response = $this->json('POST', '/company/adverts', ['foo' => 'bar'])
->assertStatus(201);
$advert = Advert::first();
Event::assertDispatched(AdvertPublished::class, function ($e) use ($advert) {
return $e->advert->id === $advert->id;
});
有人知道我是否遗漏了什么,或者可能是什么问题?对我来说,这更像是一个集成测试而不是单元测试,我通常不会在集成测试中伪造事件。代码看起来不错,我从未尝试过只伪造一个事件,但是在回顾了EventFacade和eventfake类之后,您似乎已经正确地通过了它。我知道,这太疯狂了!我不知道为什么雄辩的事件是假的。你是否覆盖了安装程序或任何会阻止应用程序容器从另一个测试中刷新的东西?我会单独测试,我会测试某个事件是否被触发,在单独的测试中只测试函数
generateSlugOnCreate(…)
。如果我想确定我点击了控制器并断言数据库更改。。。