gpt4 book ai didi

php - 如何防止 Laravel event() 在单元测试期间触发

转载 作者:行者123 更新时间:2023-12-05 01:14:25 27 4
gpt4 key购买 nike

我有一个类使用 Laravel 的全局 event() 函数在模型更改时触发单个事件。我能够在单元测试期间阻止此事件触发的唯一方法是实际命名空间并在测试本身中声明一个新的 event() 函数并使其不执行任何操作。它有效,但对我来说似乎不是一个很好的解决方案。我查看了 Laravel 文档,发现有些人在测试中成功使用了 Event::fake(),但是当我尝试这样做时,我得到:

BadMethodCallException: Method Mockery_0_Illuminate_Contracts_Events_Dispatcher::until() does not exist on this mock object

我正在使用 Laravel 5.4。有没有更简洁的方法来防止此事件在测试期间触发?我真的不喜欢声明一个空的命名空间 event() 函数的想法。

编辑:

我正在测试的类是一个 UserDomain 类。在逻辑的一部分中,它调用了 Laravel 的全局 event() 方法:

event(new RoleChanged($this->user));

为了抑制它在测试中触发,我尝试了 Event::fake() 并且我还尝试了使用特征 WithoutEvents 及其 withoutEvents() 方法。两者都不起作用,并且我上面提到的相同错误两次都发生了。

最佳答案

您需要在测试中使用 Illuminate\Foundation\Testing\WithoutEvents trait。

<?php

namespace Tests\Unit;

use Tests\TestCase;
use Illuminate\Foundation\Testing\WithoutEvents;
use Illuminate\Foundation\Testing\RefreshDatabase;

class FooTest extends TestCase
{
use WithoutEvents;
}

关于php - 如何防止 Laravel event() 在单元测试期间触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58616175/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com