2

(使用来自 packagegist 的 laravel "4.0.*"、mockery "dev-master" 和 phpunit "3.7.*")

我一直在重构一些代码,以使其更易于使用 IoC 容器进行测试,到目前为止,它工作得非常好。我找到了一个执行以下操作的控制器

$batch = Batch::find($id)

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

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

但这只会触发以下错误

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

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

4

1 回答 1

4

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

我认为,您在这里想要做的只是将常规的 Mockery 模拟注入到应用程序容器中。

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

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

// rest of test follows.
于 2013-09-17T16:07:20.587 回答