Мне нужно протестировать веб-приложение PHP. Приложение представляет собой один блок процедурного кода (в index.php), контролируемый переменными сеанса. Определенные потоком управления, включены другие файлы, которые также являются процедурными блоками php (xy.inc) и изменяют переменные сеанса. Например:
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Content-Type: text/html; charset=utf-8");
session_name("some_name");
session_start();
$_SESSION['some_key'] = 'some_value';
if($_SESSION['key1'] == 1){
//include some file that in the end sets $_SESSION['key1'] = 0
}
else if($_SESSION['key2'] == 1){
//Do something
$_SESSION['key2'] = 0;
$_SESSION['keyX'] = 'someOtherControlValue';
}
//....Lots of code
$SESSION['whatever'] = 'justAnotherValue';
//..more code, more $_SESSION checks and so on
Рефакторинг не является вариантом (на данный момент?), Поэтому я просто пытаюсь запустить хотя бы некоторые базовые тесты, не мешая кодеру "стиль программирования".
Есть ли способ доступа (и изменения) свойств $ _SESSION в приемочных тестах? Я хочу использовать Codeception для своих тестов (но я открыт для альтернатив).
Я хочу достичь чего-то вроде (псевдо)
// setup test db etc.
get('/');
assert(title == 'the title');
// change some control values
$_SESSION['myDatabase'] = 'myTestdb';
$_SESSION['SomeKeyForFuctionIWantTest'] = 'myValue';
get('/');
assert($_SESSION['SomeKeyForFuctionIWantTest'] == 'myValue');
assert(getSomeElementCreatedByFunction() != null);
assert(somethingIsInTheDatabase);
У меня мало опыта работы с php и session-management (и я кодирую в ООП), может ли кто-нибудь помочь мне?
примечание: нет рамок, mvc или всего остального
Я нашел относительно простой и очень грязный взлом для этого.
При тестировании я не вызываю "/" (index.php) напрямую, а тестовую страницу. На тестовой странице по мере необходимости меняются переменные (может быть, нужен "безопасный" способ ввода моих тестовых варов здесь.).
# defined in /test.php - otherwise change path in include index
<?php
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Content-Type: text/html; charset=utf-8");
session_name("my_session_name");
session_start();
$_SESSION['TESTME'] = 'bla';
session_write_close();
session_destroy();
include 'index.php';
?>
В index.php я могу видеть $ _SESSION ['TESTME'] == 'bla'.
Думаю, сражайтесь с огнем.