模拟“应该接收”但方法不存在

别名

我想通过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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

该模拟对象上不存在方法-Laravel,Mockery

来自分类Dev

如何禁止不存在的模拟方法的猴子修补?

来自分类Dev

的方法不存在

来自分类Dev

使用模拟修补不存在的属性

来自分类Dev

PHPUnit:模拟不存在的类

来自分类Dev

方法分页不存在

来自分类Dev

unbind()方法不存在

来自分类Dev

方法/属性不存在

来自分类Dev

方法链接不存在

来自分类Dev

日期不存在的方法

来自分类Dev

方法 addSelect 不存在

来自分类Dev

方法链接不存在。

来自分类Dev

方法 whereRaw 不存在

来自分类Dev

无法存根方法“标题”,因为模拟的类OCMock中不存在这样的方法

来自分类Dev

无法存根方法“标题”,因为在模拟的类OCMock中不存在这样的方法

来自分类Dev

Mockery和PHPUnit:此模拟对象上不存在方法

来自分类Dev

存根或模拟不存在的方法时,如何配置Rspec引发错误?

来自分类Dev

Mockery和PHPUnit:此模拟对象上不存在方法

来自分类Dev

迷宫求解器方法,应该检查8个方向,检查甚至不存在的方向

来自分类Dev

模拟PHPUnit 10中不存在的类

来自分类Dev

如果要求的密钥不存在,应该抛出什么异常?

来自分类Dev

是/ etc / X11 / xinit / xinitrc。应该不存在?

来自分类Dev

如果不存在则生成方法

来自分类常见问题

以下方法不存在:disableRegistry()

来自分类Dev

Laravel方法[hasMany]不存在

来自分类Dev

Laravel:BadMethodCallException方法[查找]不存在

来自分类Dev

Laravel:方法[显示]不存在

来自分类Dev

方法validateConfirm不存在(Laravel)

来自分类Dev

Laravel:BadMethodCallException方法[存储]不存在