Мне нужно протестировать 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 и управлении сессиями (и я пишу в ООП), кто-нибудь может мне помочь?
примечание: нет фреймворка, 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’.
Борьба с огнем с огнем, я думаю ..
Других решений пока нет …