首页 > 解决方案 > 如何在 Laravel 单元测试中停止事件伪造(切换事件伪造)

问题描述

我正在开发一个 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 中实现这样的目标?

标签: laravelunit-testinglaravel-events

解决方案


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() {}都有伪造的事件。外面的一切都会正常运作。


推荐阅读