尝试模拟模型外观会返回未定义shouldReceive的错误

时间:2013-09-17 13:25:35

标签: php unit-testing laravel laravel-4 mockery

(使用laravel“4.0。*”,嘲弄“dev-master”和phpunit“3.7。*”来自packagist)

我一直在考虑使用IoC容器使一些代码更加可测试,到目前为止,它已经令人惊讶地工作了。我找到了一个控制器,它执行以下操作

$batch = Batch::find($id)

现在我需要测试这个外观,我发现很多资源告诉我我可以在模型上调用shouldReceive,所以我在单元测试中有以下内容

Models\Batch::shouldReceive('find')
    ->once()
    ->with(10)
    ->andReturn($this->mock);

但这只会触发以下错误

BadMethodCallException:调用未定义的方法Illuminate \ Database \ Query \ Builder :: shouldReceive()

我不知道在这种情况下该怎么办,我无法在网上找到任何资源来帮助我解决这个问题。

1 个答案:

答案 0 :(得分:3)

shouldReceive()适用于外墙,但我认为它不适用于模型。

我想,你想在这里做的只是注入app容器的常规Mockery模拟。

[警告 - 未经测试的代码]

$mock = Mockery::mock('Batch');
$mock->shouldReceive('find')->once()->with(10)->andReturn($mock);
App::instance('Batch',$mock);

// rest of test follows.