Я хотел бы проверить поведение моего приложения, если я отправляю неправильные значения в select
входе в форме.
Это моя форма в HTML:
<form (...)> (...) <select name="select_input"> <option value="1">text</option> </select> </select>
В моем тесте, получите форму с искателем и попробуйте «выбрать» неправильное значение:
$form['select_input'] = 9999999; $client->submit($form); /* EDIT */ /*I am expecting the user to not be redirected to the user page, and the server to respond with the same form, containing an error message */ $this->assertFalse($client->getResponse()->isRedirect('/success_page')); $this->assertEquals(1, $client->getCrawler()->filter('input.error'));
Но в консоли я получаю сообщение:
InvalidArgumentException: Input "user_profile[voteProfile]" cannot take "9999999" as a value (possible values: 1)
Как я могу выбрать неправильное значение для проверки ответа? Можно было бы отправить неверное значение реальным сервером.
Функция disableValidation
позволяет выбрать невозможные значения в параметрах:
$form = $crawler->selectButton('button')->form(); $form->get('select_input')->disableValidation()->setValue(999999); $client->submit($form);
И дело сделано!
В сообщении об ошибке указано «(возможные значения: 1)», которое соответствует одному возможному значению в вашей форме. Поэтому, действительно, я думаю, что вы получаете исключение, которое вы должны ожидать. Если реальный сервер должен был отправить неверное значение, я бы предположил, что это же исключение произойдет.
В своем тесте попробуйте добавить аннотацию, например:
/** * @expectedException InvalidArgumentException */ public function testForm() { //test logic here }
Или:
public function testForm() { $this->setExpectedException('InvalidArgumentException'); }
Дополнительная информация здесь