part_os
@part_os
Сложное в простом

Как Mock PHPUnit связанные модели в Laravel?

Всем привет, подскажите как замокать связанную модель?
class Test1 extends Model
{
public function type_status()
{
     return $this->belongsTo('App\Types', 'type_id');
}
}

class Types extends Model
{
}


пишу тест:
public function testGetTable()
    {
        $test1= $this->createMock(Test1::class);
        $test1->type_id = 1;

        $types = $this->createMock(Types::class);
        $types->id = 1;
        $types->type = 'Type1';
        $types->reduction = 'T1';

        $test1->attach($types);
     }


Тест выдает что type_status => null
в методе который тестирую вызывается: $test1->type_status ->reduction
пробовал так же:
$test1->method('type_status')->willReturn('T1');
  • Вопрос задан
  • 478 просмотров
Решения вопроса 1
part_os
@part_os Автор вопроса
Сложное в простом
В общем решением у меня стало:
1. установка codeception
2. обернуть метод public function type_status() в:
public function getTypes()
    {
       return $this->type_status;
    }

3. замена в коде на этот метод
4. использовать в тестах
Stub::make(Test1::class,
[
'getTypes' => function(){}
]);

в итоге получил тесты и явный вызов метода в коде.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега Laravel
$test1->type_status()->attach($types);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы