(使用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()
我不知道在这种情况下该怎么办,我无法在网上找到任何资源来帮助我解决这个问题。
答案 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.