我想通过Laravel进一步了解Tests和Mockery。我有一个控制器用户使用的存储库模式设置。我想测试一下我的基本getAllUsers()
方法:
public function test_get_all_users_method()
{
$repo = Mockery::mock('Acme\Repositories\User\UserRepository');
$repo->shouldReceive('all')->once()->andReturn('foo');
$controller = new Acme\Controllers\Api\UserController($repo);
$response = $controller->getComponents();
$this->assertEquals('foo', $response);
}
据我了解,我正在模拟我的UserRepository,并且希望我的UserRepository遇到all()
方法上的问题。这将返回一些伪数据,我希望在我的响应输出中看到这一点。
这样就可以了。该all()
方法存在于我的仓库的Eloquent实现中。但是,如果我删除该all()
方法,则测试仍然可以通过...为什么呢?测试肯定会失败。
如果这是正常的,那么我将努力理解为什么要像这样测试我的控制器,因为我可以将任何旧方法名称传递给它,即使它不存在也是如此。
干杯
这就是嘲笑在默认情况下的运作方式,我喜欢这种方式,因为它允许我通过一厢情愿的方式发展,即我希望我的UserRepository
界面有一个all
方法。
您可以告诉嘲笑禁止它,这有点丑陋,但是您可以将其放入测试引导文件中:
\Mockery::getConfiguration()->allowMockingNonExistentMethods(false);
您还可以将其设置为使用环境变量或其他方式控制它,因此您可以在正常使用期间模拟不存在的方法,但在连续集成运行等过程中禁止使用它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句