门面模拟叫两次不首先覆盖?

时间:2015-01-06 23:12:44

标签: php unit-testing laravel mocking

我正在使用Laravel并模拟像

这样的Facade对象
Confide::shouldReceive('user')->atLeast(1)->andReturn( (object) array('id' => 42) );
var_dump(Confide::user()->id); // returns int(42)
Confide::shouldReceive('user')->atLeast(1)->andReturn( (object) array('id' => 1) );
var_dump(Confide::user()->id); // returns int(42) but should be int(1)

但是var_dump(Confide::user()->id);始终返回42.即使第二个应该返回1,因为我将其设置为1

我做错了什么?

1 个答案:

答案 0 :(得分:2)

Confide::shouldReceive('user')->atLeast(1)->andReturn(
    (object) array('id' => 42),
    (object) array('id' => 1)
);

所以这必须至少运行一次。

第一个调用将返回一个带有id = 42的对象,第二个调用将返回一个带有id = 1的对象。

PS:我从未使用过嘲弄,我只是检查了它的文档http://docs.mockery.io/en/latest/reference/expectations.html