Октябрь 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. Я видел несколько предложенных решений этой проблемы, но ни один из них не помог мне:

  1. Использование "Config::set('cms.activeTheme', 'myTheme');" перед запуском теста.
  2. Изменение "pluginsPathLocal" с "base_path('tests/fixtures/plugins')" на "base_path('plugins')" в config / testing / cms.php
  3. Изменение "themesPathLocal" с "base_path('tests/fixtures/themes')" на "base_path('themes')" в config / testing / cms.php

Жизнь была бы намного проще, если бы я мог понять, как правильно посетить одну из страниц моей темы........

Другие вопросы по тегам