Модульное тестирование Laravel, если событие запускается, когда запускается красноречивое событие модели

Я разрабатываю приложение Laravel и пишу тесты по ходу дела. Теперь у меня возникла проблема с написанием теста, который утверждает, запускается ли событие, когда запускается красноречивое событие модели. Вот что я делаю.

Это созданная мной функция ItemObserver

public function created(Item $item)
{
    event(new NewItemCreated($item));
}

Как видите, я запускаю событие внутри созданного события красноречивого наблюдателя модели.

Если я хочу подтвердить, запускается ли событие в тесте, я должен подделать событие, а затем подтвердить что-то вроде этого.

Event::fake();
factory(Item::class)->create(); //created function of observer should be triggered but it will not be
Event::assertDispatched(NewItemCreated::class);

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


person Wai Yan Hein    schedule 16.09.2019    source источник
comment
Вы привязали наблюдателя к модели?   -  person Kevin Bui    schedule 17.09.2019


Ответы (1)


Подделайте только событие, которое хотите протестировать:

Event::fake([NewItemCreated::class]);

Соответствующая документация.

person Olivenbaum    schedule 16.09.2019