使用Phpunit进行功能测试:InvalidArgumentException:无法访问的字段

时间:2018-01-28 19:34:38

标签: symfony testing phpunit

我试图测试一个表单,但是我遇到了无法访问的字段异常。

我的控制器代码:

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"

我按照https://symfony.com/doc/current/testing.html

的教程进行操作

2 个答案:

答案 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的请求。

相关问题