Я использую phpunit для запуска функциональных тестов, но у меня проблема с несколькими формами.Проблема в том, что phpunit не знает о JS, и у меня есть форма с динамически заполненным полем выбора, которая требует jQuery.
Так что мне нужно передать данные формы напрямую.«Книга» дает следующий пример:
// Directly submit a form (but using the Crawler is easier!)
$client->request('POST', '/submit', array('name' => 'Fabien'));
Когда я использовал этот пример, контроллер не получил никаких данных формы.По сути, я увидел, что передача ключа «имя» массива в моей ситуации была неправильной, так как мне нужно было имя формы, которое было «расписанием» в моем коде.Поэтому я попробовал что-то вроде:
$client->request('POST', '/timesheet/create', array('timesheet[project]' => '100'));
Но это все равно не сработало.В контроллере я пытался понять, что происходит и что, если что-то получалось:
$postData = $request->request->get('timesheet');
$project = $postData['project'];
Это не сработало, а $ project остался пустым.Однако, если бы я использовал следующий код, я получил бы значение:
$project = $request->request->get('timesheet[project]');
Но, очевидно, это не то, что я хочу.По крайней мере, я вижу, что есть некоторые данные POST.Моя последняя попытка состояла в том, чтобы попробовать следующее в методе теста:
$this->crawler = $this->client->request('POST', '/timesheet/create/', array('timesheet' => array(project => '100'));
Поэтому я пытаюсь передать массив «расписания» в качестве первого элемента массива параметров запроса.Но с этим я получаю сообщение об ошибке:
Symfony\Component\Form\Exception\UnexpectedTypeException: Expected argument of type "array", "string" given (uncaught exception) at /mnt/hgfs/pmt/src/vendor/symfony/src/Symfony/Component/Form/Form.php line 489
Я был бы очень рад, если бы кто-то мог рассказать о том, что в «книге», о том, как мне это сделать.
Формапривязать в контроллере:
if ($request->getMethod() == 'POST') {
$form->bindRequest($request);
if ($form->isValid()) {
$postData = $request->request->get('timesheet');
$project = $postData['project'];
$timesheetmanager = $this->get('wlp_pmt.timesheet_db_access');
$timesheetmanager->editTimesheet($timesheet);
return $this->redirect($this->generateUrl('timesheet_list'));
}
}