El tutorial Jobeet

11.5. Probando la existencia de errores

Cuando se envían datos válidos en el formulario, el proceso de creación de una oferta de trabajo funciona tal y como se esperaba. A continuación se va a probar su comportamiento cuando se envían datos no válidos:

$browser->
  info('  3.2 - Submit a Job with invalid values')->

  get('/job/new')->
  click('Preview your job', array('job' => array(
    'company'      => 'Sensio Labs',
    'position'     => 'Developer',
    'location'     => 'Atlanta, USA',
    'email'        => 'not.an.email',
  )))->

  with('form')->begin()->
    hasErrors(4)->
    isError('description', 'required')->
    isError('how_to_apply', 'required')->
    isError('email', 'invalid')->
  end()
;

Si se pasa un número entero al método hasErrors() se puede comprobar que existan exactamente ese número de errores en el formulario. Por su parte, el método isError() comprueba el código de error del campo indicado.

Nota En la prueba que hemos escrito para el caso en el que se envían datos no válidos, no hemos vuelto a probar el formulario entero. En este caso, sólo hemos añadido las pruebas necesarias para probar cosas muy específicas del formulario.

También es posible probar el código HTML generado para comprobar si contiene mensajes de error, pero en este caso no es necesario porque no hemos modificado la estructura del formulario.

A continuación vamos a probar la barra de administrador de la página de previsualización de una oferta de trabajo. Cuando una oferta de trabajo todavía no se ha activado, las acciones que se pueden realizar son editar, borrar y publicar la oferta. Para probar esos tres enlaces, en primer lugar tenemos que crear una oferta de trabajo. Como esto obligaría a copiar y pegar mucho código, vamos a añadir un método en la clase JobeetTestFunctional que se encargue de crear ofertas de trabajo:

// lib/test/JobeetTestFunctional.class.php
class JobeetTestFunctional extends sfTestFunctional
{
  public function createJob($values = array())
  {
    return $this->
      get('/job/new')->
      click('Preview your job', array('job' => array_merge(array(
        'company'      => 'Sensio Labs',
        'url'          => 'http://www.sensio.com/',
        '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,
      ), $values)))->
      followRedirect()
    ;
  }

  // ...
}

El método createJob() crea una nueva oferta de trabajo, realiza la redirección y devuelve el objeto del navegador para no romper con la interfaz fluida de los métodos de pruebas. Si quieres también puedes pasar un array de valores que se combinan con los valores por defecto antes de enviar el formulario.