如何防止 Laravel 在测试中触发事件?

hdi*_*fen 6 php laravel eloquent laravel-5

我刚刚写了一个 laravel Observer。它附加到一个Company模型,因为我想了解创建公司的用户。我还有一大套其他测试,它们使用工厂来设立公司。这些测试现在失败了,因为观察者需要用户,但调用工厂时没有用户登录。

公司观察者.php

class CompanyObserver {
    function created(Company $company) {
        info('USER ' . Auth::user()->id . ' created the new company ' . $company->id . '.';
    }
}
Run Code Online (Sandbox Code Playgroud)

旧测试.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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我如何处理需要用户登录才能进行旧测试的新观察者?我必须去改变所有旧的测试吗?

小智 7

在 Laravel 8 中,这应该可行。

$company = Company::withoutEvents(function () {
        return Company::factory()->create();
    });
Run Code Online (Sandbox Code Playgroud)