如何模拟唯一验证规则?

时间:2017-06-16 09:47:19

标签: php unit-testing mocking laravel-5.1

我正在为store()的{​​{1}}函数编写测试用例,这会在数据库中添加新资源。

在我的测试用例中,我不被允许访问数据库,因此我在模拟所有数据库交互&现在我需要模拟ResourceController验证规则。

我用Google搜索了它&甚至在stackoverflow上搜索但我没有  找到了具体的东西。

以下是我所知道的: 我可以模拟unique,但如果我嘲笑它们,那么我将无法制作验证器对象。 StackOverflow Question Here

任何人都可以引导我朝着正确的方向前进。

1 个答案:

答案 0 :(得分:2)

好的,这里有一些想法:首先,Validator是一个Facade,这意味着你可以使用Validator :: shouldReceive来模拟它的任何方法。您还可以使用Validator::swap($mock)模拟整个根对象。如果你的控制器正在使用$this->validate,你也可以通过替换内部验证器实例来模拟验证器 - 我怀疑你甚至可以在创建控制器时使用IoC容器来注入它。

如果所有其他方法都失败了,您还可以通过创建控制器的模拟来测试该方法,然后在控制器模拟上调用该方法 - 这样您就可以模拟其他内部方法(例如验证)。您可以直接测试该方法,或再次使用App::bind映射您的模拟,以便从调用方法触发。

如果您使用自定义Request类进行验证,您还可以尝试模拟该类以完全禁用验证,或者使用自定义验证函数而不是使用唯一测试将其替换为您自己的验证器。