【发布时间】:2020-02-25 05:01:40
【问题描述】:
我有一个类,它使用 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() 方法。两者都不起作用,并且我上面提到的相同错误两次都会发生。
【问题讨论】:
-
显示您尝试使用的导致错误的原因