Почему $ form-> isValid () возвращает false при тестировании, хотя это верно для производства? - PullRequest
0 голосов
/ 25 февраля 2020

Я использую Symfony 3.4 и пишу тесты для своих действий

И, как уже упоминалось в заголовке, $form->isValid() возвращает false, хотя он отлично работает, когда я тестирую форму на производстве .

В своих тестах я пытаюсь смоделировать POST-запрос следующим образом:

$crawler = $this->_client->request('GET', $this->_router->generate('product_new'));
$form = $crawler->filter('form')->form();
$values = $form->getPhpValues();
$values['product']['code'] = 'PRD';
$values['product']['name'] = 'TEST PRODUCT';
$values['product']['price'] = 550;
$this->_client->request($form->getMethod(), $form->getUri(), $values, $form->getPhpFiles());
$response = $this->_client->getResponse();
// the response should return 302 because I'm doing redirection after submitting the form
// so this one should return true
$this->assertEquals(Response::HTTP_FOUND, $response->getStatusCode());

И это действие в ProductController классе:

/**
 * @Route("/new", name="product_new")
 * @Method({"GET", "POST"})
 */
public function createAction(){
      $product = new Product();
      $form = $this->createForm(ProductType::class, $product);

      $form->handleRequest($request);
      // when I remove $form->isValid() the test works fine
      if ($form->isSubmitted() && $form->isValid()) {
          $em = $this->getDoctrine()->getManager();
          $em->persist($product);
          $em->flush();
          return $this->redirectToRoute('product_show', array('code' => $product->getCode()));
      }

      return $this->render('@Commerce/product/new.html.twig', array(
        'product' => $product,
        'form' => $form->createView()
      )); 
}

Чего мне здесь не хватает?

...