AgentSmith72
@AgentSmith72
JS - это моё хобби

Как нужно внедрять mock, чтобы манипулировать возвращаемым от него результатом в методах теста Laravel?

Подскажите пожалуйста, возможно ли обновить уже инстанцированный в setUp() mock или как тогда лучше внедрять mock, чтобы манипулировать возвращаемым от него результатом в методах теста?

В проверяемом сервисе используется PaymentService, который обращается по API.
class OperationsServiceTest extends TestCase
{
    public function setUp(): void
    {
        parent::setUp();

        $this->instance(
            PaymentService::class,
            Mockery::mock(PaymentService::class, function (MockInterface $mock) {
                $mock->shouldReceive('getData')->andReturn([true]);
            })
        );
    }

    public function testPositive(): void
    {
     // Позитивному тесту нужно чтобы getData вернул не null
    }

    public function testNegative(): void
    {
     // Как здесь проверить отработку исключений, поменяв значение в andReturn([false])?
    }
}
  • Вопрос задан
  • 82 просмотра
Решения вопроса 1
AgentSmith72
@AgentSmith72 Автор вопроса
JS - это моё хобби
Вариант со статичной переменной
class OperationsServiceTest extends TestCase
{
    public static $status = [true];

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

        $this->instance(
            PaymentService::class,
            Mockery::mock(PaymentService::class, function (MockInterface $mock) {
                $mock->shouldReceive('getData')->andReturn(self::$status);
            })
        );
    }

    public function testPositive(): void
    {
        self::$status = [];
    }

    public function testNegative(): void
    {
         //  В негативном тесте mock уже вернёт пустой массив
    }
}

Так как setUp() вызывается перед запуском каждого метода, то с помощью статичной переменной, можно манипулировать возвращаемым результатом.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Сохраняйте мок в свойствах своего теста, и уже их инжекте, и через них же манипулируйте моком.
Ответ написан
Ваш ответ на вопрос

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

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