Как остановить подделку событий (переключить подделку событий) в модульном тестировании Laravel - PullRequest
0 голосов
/ 17 января 2019

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

public function test_something()
{
     Event::fake();
     //Do somethng
     //Then I want to stop faking event here something like this
     Event::stopFaking(); //maybe
}

Я думаю, мой код не требует пояснений. Как мне достичь чего-то подобного в Laravel?

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Функция Event::fake определена в Подсветка \ Поддержка \ Фасады \ Событие .

Мы можем видеть, что существует метод fakeFor, который только подделывает его во время выполнения метода обратного вызова, а затем восстанавливает исходное поведение. Вы можете использовать это так:

public function test_something()
{
     Event::fakeFor(function () {
         //Do somethng
     });
}

Как разработчику Laravel, часто полезно читать исходный код, в этой среде есть много интересных фрагментов, которые не документированы!

0 голосов
/ 17 января 2019

https://laravel.com/docs/5.7/mocking

Если вы хотите подделать прослушиватели событий только для части вашего теста, вы можете использовать метод fakeFor:

    $order = Event::fakeFor(function () {
        $order = factory(Order::class)->create();

        Event::assertDispatched(OrderCreated::class);

        return $order;
    });

    // Events are dispatched as normal and observers will run ...
    $order->update([...]);

Все внутри function() {} будет иметь поддельные события. Все снаружи будет работать нормально.

...