Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
На "голом" SQL это будет так: http://sqlfiddle.com/#!17/be7d9/12
Благодарю всех, кто уделил внимание моему вопросу. Я таки решил проблему (дошло до жирафа на третьи сутки).
Помогла мне вот эта статья: Testing a live site with Laravel Dusk using Docker Compose, как раз мой кейс. Также ознакомился со статьёй Что такое Selenium? для лучшего понимания собственных действий.
Версия Laravel: Laravel Framework 5.5.24
Версия PHP: 7.1.12 (cli) (built: Dec 1 2017 01:47:06) ( NTS )
Операционная система и её версия: Linux 21a604dfc470 4.10.0-40-generic #44~16.04.1-Ubuntu SMP Thu Nov 9 15:37:44 UTC 2017 x86_64 GNU/Linux
Вендор и версия сервера БД: Server version: 5.7.18 MySQL Community Server (GPL)
Вендор и версия Веб-сервера: PHP (в контейнере Docker), artisan serve
Задача: Необходимо запустить интеграционные тесты (Laravel Dusk)
Что произошло:
Сперва я запустил ExampleTest "из коробки", на что получил следующее сообщение:
$ docker-compose exec web ./artisan dusk
PHPUnit 6.5.3 by Sebastian Bergmann and contributors.
E 1 / 1 (100%)
Time: 4.02 seconds, Memory: 10.00MB
There was 1 error:
1) Tests\Browser\ExampleTest::testBasicExample
Facebook\WebDriver\Exception\WebDriverCurlException: Curl error thrown for http POST to /session with params: {"desiredCapabilities":{"browserName":"chrome","platform":"ANY","chromeOptions":{"binary":"","args":["--disable-gpu","--headless"]}}}
Failed to connect to localhost port 3000: Connection refused
/app/vendor/facebook/webdriver/lib/Remote/HttpCommandExecutor.php:287
/app/vendor/facebook/webdriver/lib/Remote/RemoteWebDriver.php:121
/app/tests/DuskTestCase.php:39
/app/vendor/laravel/dusk/src/TestCase.php:209
/app/vendor/laravel/framework/src/Illuminate/Support/helpers.php:762
/app/vendor/laravel/dusk/src/TestCase.php:210
/app/vendor/laravel/dusk/src/TestCase.php:116
/app/vendor/laravel/dusk/src/TestCase.php:88
/app/tests/Browser/ExampleTest.php:21
ERRORS!
Tests: 1, Assertions: 0, Errors: 1.
Тогда я запустил Chrome драйвер вручную:
$ docker-compose exec web ./vendor/laravel/dusk/bin/chromedriver-linux --port=3000
Starting ChromeDriver 2.31.488763 (092de99f48a300323ecf8c2a4e2e7cab51de5ba8) on port 3000
Only local connections are allowed.
И попробовал ещё раз выполнить тест:
$ docker-compose exec web ./artisan dusk
PHPUnit 6.5.3 by Sebastian Bergmann and contributors.
E 1 / 1 (100%)
Time: 2.51 minutes, Memory: 10.00MB
There was 1 error:
1) Tests\Browser\ExampleTest::testBasicExample
Facebook\WebDriver\Exception\WebDriverCurlException: Curl error thrown for http POST to /session with params: {"desiredCapabilities":{"browserName":"chrome","platform":"ANY","chromeOptions":{"binary":"","args":["--disable-gpu","--headless"]}}}
Operation timed out after 30000 milliseconds with 0 bytes received
/app/vendor/facebook/webdriver/lib/Remote/HttpCommandExecutor.php:287
/app/vendor/facebook/webdriver/lib/Remote/RemoteWebDriver.php:121
/app/tests/DuskTestCase.php:39
/app/vendor/laravel/dusk/src/TestCase.php:209
/app/vendor/laravel/framework/src/Illuminate/Support/helpers.php:762
/app/vendor/laravel/dusk/src/TestCase.php:210
/app/vendor/laravel/dusk/src/TestCase.php:116
/app/vendor/laravel/dusk/src/TestCase.php:88
/app/tests/Browser/ExampleTest.php:21
ERRORS!
Tests: 1, Assertions: 0, Errors: 1.
В итоге, он просто завершился по таймауту.
Я ожидал: корректного выполнения теста.
Мои варианты / догадки, почему это произошло:
Возможно, необходимо указать путь к Chrome драйверу, т.к. при предыдущем запуске терминал отображал сообщение, что он не может найти бинарь.
Код:
tests\DuskTestCase.php:
<?php
namespace Tests;
use Laravel\Dusk\TestCase as BaseTestCase;
use Facebook\WebDriver\Chrome\ChromeOptions;
use Facebook\WebDriver\Remote\RemoteWebDriver;
use Facebook\WebDriver\Remote\DesiredCapabilities;
abstract class DuskTestCase extends BaseTestCase
{
use CreatesApplication;
/**
* Prepare for Dusk test execution.
*
* @beforeClass
* @return void
*/
public static function prepare()
{
static::startChromeDriver();
}
/**
* Create the RemoteWebDriver instance.
*
* @return \Facebook\WebDriver\Remote\RemoteWebDriver
*/
protected function driver()
{
$options = (new ChromeOptions)->addArguments([
'--disable-gpu',
'--headless'
]);
return RemoteWebDriver::create(
'http://localhost:3000', DesiredCapabilities::chrome()->setCapability(
ChromeOptions::CAPABILITY, $options
)
);
}
}
tests\Browser\ExampleTest.php
<?php
namespace Tests\Browser;
use Tests\DuskTestCase;
use Laravel\Dusk\Browser;
use Illuminate\Foundation\Testing\DatabaseMigrations;
class ExampleTest extends DuskTestCase
{
/**
* A basic browser test example.
*
* @return void
*/
public function testBasicExample()
{
$this->browse(function (Browser $browser) {
$browser->visit('/')
->assertSee('Laravel');
});
}
}
.env (частично)
APP_ENV=local
APP_URL=http://localhost:3000
routes\web.php (частично)
Route::get('/', 'ForumsController@index');