Октябрь CMS PHPUnit Маршрутное тестирование
Я пытаюсь написать несколько тестов для пользовательских маршрутов октябрьского плагина CMS, используя PHPUnit, но сталкиваюсь с некоторыми ошибками, заставляя тесты работать правильно.
Каждый тест проходит при индивидуальном запуске, но при выполнении в группе первый тест будет пройден, а остальные не пройдут с 500 ошибками. Сообщение об ошибке для неудачных тестов:
in Resolver.php line 44
at HandleExceptions->handleError('8', 'Undefined index: myThemeName',
'/Users/me/src/myProject/vendor/october/rain/src/Halcyon/Datasource/
Resolver.php', '44', array('name' => 'myThemeName')) in Resolver.php line
44
Тестовый пример выглядит так:
class RoutesTest extends PluginTestCase
{
protected $baseUrl = "/";
public function setUp() {
parent::setUp();
DB::beginTransaction();
}
public function tearDown()
{
DB::rollBack();
parent::tearDown();
}
public function testRootPath()
{
$response = $this->call('GET', '/');
$this->assertEquals(200, $response->status());
}
public function testIntroPath()
{
$response = $this->call('GET', '/intro');
$this->assertEquals(200, $response->status());
}
etc...
}
3 ответа
Мы закончили тем, что использовали curl, чтобы сделать фактический запрос и получить код ответа от этого.
protected function getResponseCode($url) {
$ch = curl_init($this->baseUrl.$url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_TIMEOUT,10);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_exec($ch);
return curl_getinfo($ch, CURLINFO_HTTP_CODE);
}
public function testRootPath()
{
$this->assertEquals(200, $this->getResponseCode('/'));
}
Теперь все тесты проходят без использования изолированных процессов.
Я не знаю почему, но работает, если вы добавите флаг --process-isolation
на ваше phpunit
вызов, я думаю, может быть, проблема с кешем
К сожалению, нет решения, просто другой угол. Я думаю, что это связано с октябрьской "тестовой" конфигурацией (config / testing / cms.php). Это будет искать файлы в каталоге "tests / fixtures / themes / pages /". Файл index.htm, который он там находит, имеет параметр url, установленный как '/'. Вот почему phpunit найдет его, но не другие URL. Я видел несколько предложенных решений этой проблемы, но ни один из них не помог мне:
- Использование "Config::set('cms.activeTheme', 'myTheme');" перед запуском теста.
- Изменение "pluginsPathLocal" с "base_path('tests/fixtures/plugins')" на "base_path('plugins')" в config / testing / cms.php
- Изменение "themesPathLocal" с "base_path('tests/fixtures/themes')" на "base_path('themes')" в config / testing / cms.php
Жизнь была бы намного проще, если бы я мог понять, как правильно посетить одну из страниц моей темы........