Я работаю над проектом SilverStripe. Я пишу функциональные тесты для моего модульного теста. Ниже приведен сценарий, который я пытаюсь проверить. Когда выполняется запрос POST, я сохраняю данные из тела запроса в сеанс SilverStripe. Я хочу подтвердить / проверить, что данные хранятся в сеансе.
Это мой класс контроллера
class CustomFormPageController extends PageController
{
private static $allowed_actions = [
'testPostRequest',
];
private static $url_handlers = [
'testPostRequest' => 'testPostRequest',
];
public function testPostRequest(HTTPRequest $request)
{
if (! $request->isPOST()) {
return "Bad request";
}
//here I am saving the data in the session
$session = $request->getSession();
$session->set('my_session_key', $request->getBody());
return "Request successfully processed";
}
}
Ниже приведен мой класс тестирования
class CustomFormPageTest extends FunctionalTest
{
protected static $fixture_file = 'fixtures.yml';
public function testTestingPost()
{
$formPage = $this->objFromFixture(CustomFormPage::class, 'form_page');
$formPage->publish("Stage", "Live");
$response = $this->post($formPage->URLSegment . '/testPostRequest', [
'name' => 'testing'
]);
$request = Injector::inst()->get(HTTPRequest::class);
$session = $request->getSession();
$sessionValue = $session->get('my_session_key');
var_dump($sessionValue);
}
}
Когда Я запускаю тест, я получаю следующую ошибку.
ArgumentCountError: Too few arguments to function SilverStripe\Control\HTTPRequest::__construct(), 0 passed and at least 2 expected
Как я могу это исправить? Как я могу проверить, хранятся ли данные в сеансе?
Я тоже пробовал это, и он всегда возвращает NULL
var_dump($this->session()->get('my_session_key');