我正在为 ResourceController
的 store()
函数编写测试用例,该函数在数据库中添加新资源。
我不允许在测试用例中访问数据库,因此我正在模拟所有数据库交互,现在我需要模拟唯一
验证规则。
我用谷歌搜索过它,甚至在 stackoverflow 上搜索过,但我没有 发现任何具体内容。
这是我所知道的:-
我可以模拟 \Validator::getPresenceVerifier() &
\Validator::setPresenceVerifier()
但如果我模拟它们,那么我将无法创建验证器对象。 StackOverflow Question Here
任何人都可以引导我走向正确的方向吗?
最佳答案
好的,这里有一些想法供您引用:首先,Validator 是一个外观,这意味着您可以使用 Validator::shouldReceive 来模拟它的任何方法。您还可以使用 Validator::swap($mock) 模拟整个根对象。如果您的 Controller 使用 $this->validate
,您还可以通过替换内部验证器实例来模拟验证器 - 我怀疑您甚至可以在创建时使用 IoC 容器来注入(inject)它 Controller 。
如果所有其他方法都失败,您还可以通过创建 Controller 的模拟来测试该方法,然后在 Controller 模拟上调用该方法 - 这样您就可以模拟其他内部方法(例如验证)。您可以直接测试该方法,或再次使用 App::bind
映射您的模拟,以便它从调用方法触发。
如果您使用自定义 Request 类进行验证,您还可以尝试模拟该类以完全禁用验证,或者使用自定义验证函数而不是唯一的测试将其替换为您自己的验证器。
关于php - 我如何模拟唯一的验证规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44586114/