Как я могу предотвратить запуск событий Laravel внутри тестов? - PullRequest
2 голосов
/ 02 июля 2019

Я только что написал Laravel Наблюдатель . Он привязан к модели 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);
    }
}

Как я могу справиться с наличием нового наблюдателя, который требует, чтобы пользователь вошел в мои старые тесты? Нужно ли мне идти и менять все мои старые тесты?

1 Ответ

1 голос
/ 02 июля 2019

В начале вашего тестового вызова 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

Подробнееинформация о фальсификации событий в документации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...