我正在尝试这个:
$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类没有被模拟。它仍在尝试访问数据库。为什么呢?
答案 0 :(得分:0)
可能的问题是Laravel不幸使用Façade(也是工厂)。如果已使用Façade实例化DataSet
,它将继续返回同一个类,您将不会获得模拟版本。
如果你可以在不使用Laravel中的Façade的情况下实例化你的课,我不记得了。您必须记住,当您在应用程序中静态调用DataSet
时,您实际上并未引用API\V1\DataSet
,而是管理它的其他内容。