Używam phpunit do uruchamiania testów funkcjonalnych, ale mam problem z kilkoma formularzami. Problem polega na tym, że phpunit nie jest świadomy JS i mam formularz z dynamicznie wypełnionym polem wyboru, które wymaga jQuery.Symfony2 Test funkcjonalny: przekazywanie danych z formularza bezpośrednio
Muszę więc przekazać dane formularza bezpośrednio. The „książka” podaje następujący przykład:
// Directly submit a form (but using the Crawler is easier!)
$client->request('POST', '/submit', array('name' => 'Fabien'));
Kiedy użyłem tego przykładu sterownik nie otrzymała żadnych danych formularza. Intially widziałem, że przekazanie klucza tablicy "name" nie było poprawne w mojej sytuacji, ponieważ potrzebowałem nazwy formularza, która była "timesheet" w moim kodzie. Więc spróbowałem czegoś takiego:
$client->request('POST', '/timesheet/create', array('timesheet[project]' => '100'));
Ale to wciąż nie zadziałało. W regulatorze Starałem się zrozumieć, co się dzieje i co zrobić, jeśli coś było odbierane:
$postData = $request->request->get('timesheet');
$project = $postData['project'];
to nie działa i $ projekt pozostał pusty. Jednak jeśli użyłem następujący kod mam wartość:
$project = $request->request->get('timesheet[project]');
jednak wyraźnie, że nie jest to, co chcę. Najmniejszy chociaż widzę, że istnieje kilka danych POST. Moja ostatnia próba była spróbuj wykonać następujące czynności w metodzie badania:
$this->crawler = $this->client->request('POST', '/timesheet/create/', array('timesheet' => array(project => '100'));
Więc staram się przekazać „grafik” tablicę jako pierwszy element tablicy żądanie parametru. Ale z tym pojawia się błąd:
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
Byłbym bardzo szczęśliwy, jeśli ktoś może rozwinąć, co jest w książce „” O, jak ja powinien dostać tej pracy.
Forma wiążą kontroler:
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'));
}
}
Twoja ostatnia próba wygląda dobrze do mnie. Wklej część kontrolera w miejscu powiązania formularza. Czy przeczytałeś także rozdział dotyczący dokumentacji testów funkcjonalnych (http://symfony.com/doc/2.0/book/testing.html # forms)? Możesz spróbować manipulować elementem formularza. –
Dodałem teraz odpowiednią część kontrolera. Przeczytałem ten rozdział książki dotyczący testowania funkcjonalnego kilka razy, szukając teraz czegoś, co mogłem przegapić. Kiedy sugerujesz manipulowanie elementem formularza, czy chcesz dodać dane do testu funkcjonalnego do formularza? Nie jest to możliwe, ponieważ formularz ma dynamiczny wybór, który jest wypełniany za pomocą AJAX. Więc jest pusty i nic nie można wybrać, dlatego muszę POST treść formularza do kontrolera. – DanF7