Не удалось найти оболочку при тестировании вызова Guzzle с помощью PHPUnit

Я пишу модульный тест для API, который я разрабатываю. API написан на платформе Codeigniter, которая вызывает другой API с помощью Guzzle. Тест, который я пишу, проверяет, что вызов API возвращает правильный ответ.

Файл Test.php содержит следующий код

require '/application/libraries/apiWrappers/Breathehr.php';

class BreathehrTest extends PHPUnit_Framework_TestCase {

    public function testCanReturnEmployeeArray() {
        $breatheHR = new Breathehr();

        $employees = $breatheHR->list_employees(1);
        $this->assertArrayHasKey('employees', $employees);
    }


}

Тестируемый метод заключается в следующем.

class Breathehr {

    function __construct() {

    }

    public function list_employees($page)
    {
        $client = new GuzzleHttp\Client(
            ['base_uri' => 'https://xxx/',
                'headers' => ['X-API-KEY' => 'xxx'],
                'verify' => false]
        );

        $request = $client->get('employees?page='.$page);
        $employees = json_decode($request->getBody(true));

        $employeeData = array(
            'employees' => array(),
            'pagination' => array()
        );

        $i = 0;
        foreach($employees->employees as $employee) {
            if($employee->status !== 'Ex-employee') {
                $employeeData['employees'][$i]['firstName'] = $employee->first_name;
                $employeeData['employees'][$i]['lastName'] = $employee->last_name;
                $employeeData['employees'][$i]['jobTitle'] = $employee->job_title;
                if(isset($employee->line_manager)) {
                    $employeeData['employees'][$i]['lineManagerName'] = $employee->line_manager->first_name . ' '. $employee->line_manager->last_name;
                    $employeeData['employees'][$i]['lineManagerID'] = $employee->line_manager->id;
                }
                $employeeData['employees'][$i]['workingHours'] = $employee->full_or_part_time;
                $employeeData['employees'][$i]['email'] = $employee->email;
                $employeeData['employees'][$i]['workPhone'] = $employee->ddi;
                $employeeData['employees'][$i]['personalMobile'] = $employee->personal_mobile;
                $employeeData['employees'][$i]['homeTelephone'] = $employee->home_telephone;
                $employeeData['employees'][$i]['birthday'] = $employee->dob;
                $i++;
            }
        }

        $nextLink = $request->getHeader('Link');
        $nextLinkSplit = explode(',', $nextLink[0]);

        $pageination = array();

        foreach($nextLinkSplit as $data) {
            $split = explode(';', $data);
            preg_match('/"(.*?)"/', $split[1], $keyMatch);
            $key = isset($keyMatch[1]) ? $keyMatch[1] : FALSE;
            $number = substr($split[0], -2, 1);

            $pageination[$key] = $number;
        }

        array_push($employeeData['pagination'], $pageination);

        return $employeeData;
    }

}

Вызов API корректно работает через Postman и из браузера, но результат запуска PHPUnit из командной строки следующий

RuntimeException: Ошибка при создании ресурса: [сообщение] fopen(): Не удалось найти оболочку «https» — вы забыли включить ее при настройке PHP?

[сообщение] fopen(https://api.breathehr.com/v1/employees?page=1): не удалось открыть поток: Нет такого файла или каталога

Я погуглил сообщение об ошибке и наткнулся на этот пост SO https://stackoverflow.com/questions/5444249/unable-to-find-the-wrapper-https-did-you-forget-to-enable-it-when-you-config

Внесение этих изменений ничего не изменило. Стоит отметить, что это на локальном хосте с MAMP.

Любые идеи?

Спасибо


person terrorfall    schedule 10.06.2015    source источник
comment
вы переопределяете свой URL-адрес с помощью локального DNS?   -  person geggleto    schedule 10.06.2015
comment
Нет, только стандартная установка MAMP, работающая на localhost.   -  person terrorfall    schedule 10.06.2015
comment
Иногда CLI использует другой php.ini, чем Apache, поэтому ваши настройки, сделанные через меню WAMP, не применяются к CLI. Проверьте, загружено ли правильное расширение, запустив команду php -i | grep ssl. Таким же образом вы можете найти скрипт php.ini: php -i | grep ini   -  person Matteo    schedule 11.06.2015
comment
Привет, Маттео, проблема была в том, что CLI загружал php.ini из каталога C:\Windows. Большое спасибо за Вашу помощь. Пожалуйста, не стесняйтесь добавить это как ответ, и я приму.   -  person terrorfall    schedule 11.06.2015
comment
Привет @PeteSimmons Добро пожаловать!   -  person Matteo    schedule 11.06.2015
comment
Привет @Pete, не стесняйтесь принять мой ответ   -  person Matteo    schedule 28.08.2015
comment
Привет @Matteo Я принял ответ еще в июне!   -  person terrorfall    schedule 28.08.2015
comment
Ах ах ах!!! Привет, @Пит, извини...   -  person Matteo    schedule 28.08.2015


Ответы (1)


Иногда CLI использует другой php.ini, чем Apache, поэтому ваши настройки, сделанные через меню WAMP, не применяются к CLI.

Проверьте, загружено ли правильное расширение, запустив

command php -i | grep ssl 

Таким же образом вы можете найти скрипт php.ini:

php -i | grep ini

надеюсь, что это поможет

person Matteo    schedule 11.06.2015