我试图测试一个表单,但是我遇到了无法访问的字段异常。
我的控制器代码:
class StudentController extends Controller
{
/**
* @Route("/student/new",name="create_new_student")
*/
public function newAction(Request $request){
$student = new Student();
$form = $this->createFormBuilder($student)->add('name',TextType::class)
->add('save',SubmitType::class,['label' => 'Create student'])->getForm();
$form->handleRequest($request);
if($form->isSubmitted()){
$student = $form->getData();
$name = $student->getName();
echo "Your name is ".$name;
die();
}
return $this->render(':Student:new.html.twig',['form' => $form->createView()]);
}
}
我的StudentControllerTest:
class StudentControllerTest extends WebTestCase
{
public function testNew(){
$client = static::createClient();
$crawler = $client->request('POST','/student/new');
$form = $crawler->selectButton('Create student')->form();
$form['name'] = 'Student1';
$crawler = $client->submit($form);
$this->assertGreaterThan(0,$crawler->filter('html:contains("Your name is Student1")')->count());
}
}
当我使用phpunit运行测试时,我得到了:
的教程进行操作InvalidArgumentException:无法访问的字段" name"
答案 0 :(得分:1)
您应该使用$form['form_name[subject]']
语法
public function testNew(){
$client = static::createClient();
//you should request it with GET method, it's more close to the reality
$crawler = $client->request('GET','/student/new');
$form = $crawler->selectButton('Create student')->form();
$form['form_name[name]'] = 'Student1';
// [...]
}
答案 1 :(得分:0)
试试这种方式。编辑测试
gsub("(\\w+)", "raster(\\1)", string)
编辑控制器:
$form = $crawler->selectButton('Create student')->form(['name' => 'Student1']);
不要杀死Symfony的请求。