Метод Mockery andReturn () вместо возвращаемого значения - PullRequest
0 голосов
/ 01 марта 2019

Я пытаюсь проверить следующий метод:

/* ConfigurationService.php*/    

public function checkConfigs()
{
    $configurations = $this->getConfigurations();
    return $configurations['configExample'] === '1';
}

Учитывая, что метод getConfigurations() вызывает другие методы вне этого файла, внутри ConfigurationRepository.php, я попытался смоделировать только его возвращениеи выполнить метод, который я хочу протестировать (checkConfigs()): (пропущен некоторый код)

/* ConfigurationServiceTest.php */       

$configurationRepoMock = \Mockery::mock(ConfigurationRepository::class);
$configurationRepoMock
    ->shouldReceive('getConfigurations')
    ->once()
    ->andReturn(['configExample' => '1']);

$configurationServiceMock = \Mockery::mock(ConfigurationService::class);
$this->app->instance('App\Services\ConfigurationService', $configurationServiceMock);

$configurationServiceInstance = new ConfigurationService($configurationRepoMock);
$response = $configService->checkConfigs();

ПРОБЛЕМА, а не возвращение поддельного результата (['configExample' => '1']), метод getConfigurations() выполняется, сбой из-за других вызовов методов внутри него, возвращая ошибку:

Пересмешка \ Исключение \ BadMethodCallException: Получено Mockery_1_App_Repositories_API_ConfigurationRepository :: methodInsideGetConfigurations (), но не было указано никаких ожиданий

1017 *

Подводя итог, andReturn() не работает.Есть идеи?

1 Ответ

0 голосов
/ 01 марта 2019

Только что нашел решение ...

$configurationServiceMock = Mockery::mock(ConfigurationService::class)->makePartial();
$configurationServiceMock
        ->shouldReceive('getConfigurations')
        ->andReturn(['configExample' => '1']);

$response = $configurationServiceMock->checkConfigs();

По документам: http://docs.mockery.io/en/latest/cookbook/big_parent_class.html

В этих случаях рекомендуется смоделировать метод return напрямую, поэтому:

  • Я добавил makePartial() к ложному вызову
  • Получил смоделированный результат внутри самого Сервисного макета

Затем метод andReturn() сработал, как и ожидалось.

...