如何在Laravel单元测试中停止事件伪造(切换事件伪造)

时间:2019-01-17 14:43:53

标签: laravel unit-testing laravel-events

我正在开发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 :(得分:2)

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() {}内的所有内容都将包含伪造的事件。外面的一切都会正常运行。

答案 1 :(得分:1)

Event::fake函数在Illuminate\Support\Facades\Event中定义。

我们可以看到有一个fakeFor方法只在执行回调方法期间伪造它,然后恢复原始行为。您可以像这样使用它:

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

作为Laravel开发人员,阅读源代码通常很有用,此框架中有很多不错的零碎内容,没有记载!

相关问题