El tutorial Jobeet

11.1. Enviando un formulario

Abre el archivo jobActionsTest para añadir las pruebas funcionales del proceso de creación y validación de una oferta de trabajo.

Añade el siguiente código al final de ese archivo para acceder a la página de inserción de una nueva oferta de trabajo:

// test/functional/frontend/jobActionsTest.php
$browser->info('3 - Post a Job page')->
  info('  3.1 - Submit a Job')->

  get('/job/new')->
  with('request')->begin()->
    isParameter('module', 'job')->
    isParameter('action', 'new')->
  end()
;

Cuando hablamos de las pruebas funcionales ya vimos el método click() para simular que se ha pinchado sobre un enlace. El mismo método click() también se puede utilizar para enviar un formulario. En el caso del formulario, se puede pasar como segundo argumento del método click() un array con los valores que se quieren enviar en el formulario. Como si se tratara de un navegador de verdad, el objeto que simula el navegador combina los valores por defecto del formulario con los valores que se acaban de enviar.

Antes de pasar los nuevos valores de los campos del formulario, es necesario conocer el nombre de cada campo. Si visualizas el código fuente de la página o utilizas la opción Forms > Display Form Details" de la extensión Web Developer Toolbar del navegador Firefox, verás que el nombre del campo company es jobeet_job[company].

Nota Cuando PHP encuentra un campo de formulario con un nombre como jobeet_job[company], lo convierte automáticamente en un array de nombre jobeet_job.

Para que el código sea un poco más limpio, vamos a cambiar el formato del nombre de los campos del formulario a job[%s], por lo que es necesario que añadas el siguiente código al final del método configure() de JobeetJobForm:

// lib/form/JobeetJobForm.class.php
$this->widgetSchema->setNameFormat('job[%s]');

Después de realizar este cambio, el nombre del campo company en el navegador debería ser ahora job[company]. Ahora ya podemos pulsar en el botón "Preview your job" y ya podemos enviar valores en el formulario:

// test/functional/frontend/jobActionsTest.php
$browser->info('3 - Post a Job page')->
  info('  3.1 - Submit a Job')->

  get('/job/new')->
  with('request')->begin()->
    isParameter('module', 'job')->
    isParameter('action', 'new')->
  end()->

  click('Preview your job', array('job' => array(
    'company'      => 'Sensio Labs',
    'url'          => 'http://www.sensio.com/',
    'logo'         => sfConfig::get('sf_upload_dir').'/jobs/sensio-labs.gif',
    'position'     => 'Developer',
    'location'     => 'Atlanta, USA',
    'description'  => 'You will work with symfony to develop websites for our customers.',
    'how_to_apply' => 'Send me an email',
    'email'        => '[email protected]',
    'is_public'    => false,
  )))->

  with('request')->begin()->
    isParameter('module', 'job')->
    isParameter('action', 'create')->
  end()
;

El navegador también puede simular que se suben archivos adjuntos si pasas la ruta absoluta del archivo que se quiere subir.

El código anterior también comprueba que después de enviar el formulario, la acción que se ejecuta es create.