首页 > 解决方案 > 如何防止 laravel 在测试中触发事件?

问题描述

我刚刚写了一个 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);
    }
}

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

标签: phplaravellaravel-5eloquent

解决方案


在 Laravel 8 中,这应该可以工作。

$company = Company::withoutEvents(function () {
        return Company::factory()->create();
    });

推荐阅读