如何使用Mockery模拟Eloquent模型?

时间:2015-04-16 22:37:29

标签: php laravel eloquent

我正在尝试这个:

$this->dsMock = Mockery::mock('Eloquent', 'API\V1\DataSet');
$this->app->instance('API\V1\DataSet', $this->dsMock);
$this->dsMock->shouldReceive('isLocalData')->once()->andReturn(true);

然后,在被测试的课程内:

$test = DataSet::isLocalData($dataSetId);

但是,DataSet类没有被模拟。它仍在尝试访问数据库。为什么呢?

1 个答案:

答案 0 :(得分:0)

可能的问题是Laravel不幸使用Façade(也是工厂)。如果已使用Façade实例化DataSet,它将继续返回同一个类,您将不会获得模拟版本。

如果你可以在不使用Laravel中的Façade的情况下实例化你的课,我不记得了。您必须记住,当您在应用程序中静态调用DataSet时,您实际上并未引用API\V1\DataSet,而是管理它的其他内容。