Я запускаю свои модульные тесты через командную строку, и все работает нормально.
Но проблема здесь в том, что когда я тестирую функцию, содержащую код, который читает переменную сеанса, я получаю значение null ..
Я предполагаю, что вы не можете получить доступ к переменным сеанса, когда вы не находитесь в браузере.
Как я могу это сделать с PHP? Это возможно?
Кстати, я использую CodeIgniter 1.7.2 и CIUnit v0.17
Любые предложения или комментарии были бы большой помощью для меня ..
благодаря
Я использую класс для сеанса, как предложил Фил. Если вы вызываете session_start () вручную, вы привязываете свой код к реализации PHP-сессии. Мой вызов session_start защищен моим классом сеанса следующим образом:
if (!isset($_SESSION)) { // If we are run from the command line interface then we do not care // about headers sent using the session_start. if (PHP_SAPI === 'cli') { $_SESSION = array(); } elseif (!headers_sent()) { if (!session_start()) { throw new Exception(__METHOD__ . 'session_start failed.'); } } else { throw new Exception( __METHOD__ . 'Session started after headers sent.'); } }
Редактировать:
Вышеприведенный код войдет в ваш класс сеанса (и, вероятно, его каким-то образом вызывается его конструктором). Командная строка PHP создает массив вместо вызова session_start (который не работает в командной строке).
При тестировании кода, который зависит от переменных сеанса, я изворачиваю переменные сеанса в своем тесте:
$_SESSION = array('key1' => 'value you want', 'key2' => 'etc.');
Это позволяет вам проверить все возможные настройки сеанса, которые вы получите на странице.
Тестирование того, что значения сеанса создаются, принадлежит коду, который создает их, на мой взгляд, поэтому насмехается над их существованием. Таким образом, вы тестируете каждую единицу отдельно, а не комбинируете их и сохраняете значения сеанса между тестами.