Использование Behat для проверки поведения, связанного с загрузкой файла. Использование Goutte и Guzzle для перехвата загрузки файла, чтобы я мог взаимодействовать с ним на другом шаге.Behat: Goutte/Guzzle загрузка файла через cURL «Предупреждение: curl_setopt_array(): 3607 не является допустимым ресурсом File-Handle»
//Where to put the file
$tmpFile = 'download.zip';
$handle = fopen($tmpFile, 'w');
$goutteDriver = $this->getSession()->getDriver();
$goutteClient = $goutteDriver->getClient();
/** @var \Guzzle\Http\Client $guzzleClient */
$guzzleClient = $goutteClient->getClient();
$guzzleClient->getConfig()->set('curl.options', [CURLOPT_FILE => $handle]);
$guzzleClient->setSslVerification(false);
$goutteDriver->visit($url);
fclose($handle);
Он отлично работает, но если я запускаю два различных сценария подряд, что запускать этот шаг, я получаю ошибку:
"Warning: curl_setopt_array(): 3607 is not a valid File-Handle resource"
Edit: Я старался не закрывать $ ручку, и то каждый сценарий после него просто пропускается, а не работает. Также попытался использовать $guzzleClient->getConfig()->remove('curl.options');
, и это вызвало более поздний шаг, чтобы не работать.
Edit2: Пример проблемы:
Я взял все другие шаги, за исключением того, что я включил код здесь, загрузка файла почтового индекса.
Моя функция в настоящее время в основном выглядит следующим образом:
Background:
Given I am logged in as an admin
Scenario: A
When I click "Export All"
Scenario: B
When I click "Export All"
Когда я запускаю его, результат выглядит следующим образом:
Background:
Given I am logged in as an admin
Scenario: A
When I click "Export All"
Scenario: B
Warning: curl_setopt_array(): supplied argument is not a valid File-Handle resource in C:\wamp\www\cems2\vendor\guzzle\guzzle\src\Guzzle\Http\Curl\CurlHandle.php on line 219
Call Stack:
0.0000 131776 1. {main}() C:\wamp\www\cems2\vendor\behat\behat\bin\behat:0
0.0360 1699576 2. Symfony\Component\Console\Application->run() C:\wamp\www\cems2\vendor\behat\behat\bin\behat:32
When I click "Export All" (skipped)
Вслед за трассировку стека, что я не могу найти никаких ссылок к любому из моих кодов. Полная трассировка стека находится здесь: http://pastebin.com/Fv48gdYm
Похоже, что fopen не работает во второй раз и $ handle === false. Очевидно, вы можете это проверить. Почему он не работает - используется ли файл? Являются ли сценарии одновременными и пытаются писать в один и тот же файл одновременно? – James
Ошибка на самом деле происходит до шага, это происходит до того, как может произойти первый шаг следующего сценария. Они бегут один за другим. – Jessica
Где происходит ошибка, я предположил на строке 'set curl.options' в приведенном выше коде. – James