我刚刚写了一个laravel Observer。我想知道创建公司的用户,因此将其附加到Company
模型中。我还有大量其他测试,这些测试使用工厂来建立公司。这些测试现在失败,因为观察者需要一个用户,但是在调用工厂时没有用户登录。
CompanyObserver.php
class CompanyObserver {
function created(Company $company) {
info('USER ' . Auth::user()->id . ' created the new company ' . $company->id . '.';
}
}
OldTests.php
Class OldTests {
function testSomething() {
// Now fails because observer is triggered but no use is logged in.
$company = factory(Company::class)->create();
// Random request
$this->post('getCompany/' . $company->id)->assertStatus(200);
}
}
我该如何处理有一个新观察者,该观察者要求用户登录才能进行旧测试?我必须去更改所有旧测试吗?
答案 0 :(得分:1)
在测试电话开始Event::fake();
这将伪造测试中的所有事件。
您可以在伪造的Event
上使用断言函数来完成测试并查看事件是否被触发。
您可以像这样伪造特定范围的事件
$company = Event::fakeFor(function () {
$company = factory(Company::class)->create();
Event::assertDispatched(CompanyCreated::class);
return $company;
});
//use $company for the rest of the test
有关伪造documentation中事件的更多信息