Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Seleccionar el valor de un select con DOM Crawler de symfony

7 de enero de 2016

Hola, buenas

Estoy intentando hacer un test de un formulario que tiene 2 campos:

  1. Name (TypeText::class)
  2. Parent, es un select con una todas las categorías (EntityType:class)

NOTA: Actualmente tengo una base de datos para prod y otra para test. Las dos tienen contenido en la tabla category

La configuración es la siguiente:

#config.yml

doctrine:
    dbal:
        driver:   pdo_mysql
        host:     "%database_host%"
        port:     "%database_port%"
        dbname:   "%database_name%"
        user:     "%database_user%"
        password: "%database_password%"
        charset:  UTF8
 
#config_test.yml
doctrine:
    dbal:
        dbname:   "%database_name%_test"

El test:

$crawler = $client->request('GET', '/admin/category/new/');
 
$value = $crawler->filter('category_form[parent]')->count();
 
var_dump("Total categorias ".$value);

Al ejecutar PHPUnit me devuelve 0 como resultado.

El html es el siguiente:

<form name="category_form" method="post">
 
  <input type="text" id="category_form_name" name="category_form[name]" required="required" class="form-control" />
 
  <select id="category_form_parent" name="category_form[parent]" class="form-control">
      <option value="">select parent</option>
      <option value="1" >Deportes [es]</option> //ToString Category Entity
  </select>
 
</form>

¿Alguna sugerencia? Muchas gracias


Respuestas

#1

Solucionado, como solo hay un valor en la base de datos test selecciono el último siempre, ya que el primer valor es el texto del placeholder.

$idSelect = $crawler->filter('#category_form_parent option')->last()->attr('value');
$buttonCrawler['category_form[parent]'] = $idSelect;

Gracias

@JuanluGarciaB

7 enero 2016, 14:41
#2

Si lo prefieres, también puedes usar el método availableOptionValues() para obtener un array con los valores de todas las opciones del <select> que hayas seleccionado:

$lastOption = array_pop($crawler->filter('#category_form_parent')->availableOptionValues());

Puedes ver más métodos útiles para campos de tipo "choice" en la API de Symfony para ChoiceFormField.

@javiereguiluz

7 enero 2016, 15:04
#3

Muchas gracias Javier

@JuanluGarciaB

7 enero 2016, 17:15