无法模拟 Laravel 模型方法

Posted

技术标签:

【中文标题】无法模拟 Laravel 模型方法【英文标题】:Not able to mock Laravel Model method 【发布时间】:2020-09-11 08:41:28 【问题描述】:

我目前正在编写一个测试来测试模型方法。

我的模型Store有这个方法:

public function hourTemplate() 
    return $this->belongsTo(HourTemplate::class);

我在 setUp 方法中也对这段代码进行了测试:

public function setUp() : void
    
        parent::setUp();

        $this->storeMock = Mockery::mock(StoreModel::class)->makePartial();
        app()->instance(StoreModel::class, $this->storeMock);
    

而测试方法是这样的:

    public function test_getStoreHoursArray_when_hour_isNull() 
        $this->storeMock->shouldReceive('hourTemplate')->andReturn(new HourTemplate());

        dump((new StoreModel())->hourTemplate);

    

但是返回值为null。

【问题讨论】:

【参考方案1】:

您应该从容器中检索模拟实例

$mockedModel = app()->make(StoreModel::class);

【讨论】:

以上是关于无法模拟 Laravel 模型方法的主要内容,如果未能解决你的问题,请参考以下文章

如何模拟 Laravel Eloquent 模型的静态方法?

在 Laravel 中模拟具有关系的模型

在 Laravel 中模拟具有关系的模型

用于 PHPunit 的 Laravel 5.4 模型模拟

无法在 laravel 6 中模拟任何自定义类方法

在 PHPUnit 中调用路由时如何在 Laravel 8 中模拟 Eloquent 模型