rails rack_test feature ruby-on-rails rspec capybara

ruby on rails - rack_test - ¿Cómo funciona fill_in en Rspec/Capybara?



rspec rails (3)

Se indica que fill_in busca el name campo, el id o el texto de la etiqueta. De acuerdo con la sección ActionView :: Helpers :: FormHelper de las guías de rieles, el código de vista sobre el que pregunta debe traducirse al siguiente código html:

# I assume that you made a form for a @user object <label for="user_name"> Name </label> <input id="user_name" name="user[name]" type="text" />

Como puede ver, la label produjo el texto "Nombre", que solicita dentro de su expresión fill_in . Pero las propiedades de id y name del campo de input son ligeramente diferentes, por lo que debería haber usado el selector basado en id para lograr el mismo resultado:

fill_in "user_name", with: ''Example User''

Por lo tanto, para resumir, el campo de label no es obligatorio, pero debe observar cuidadosamente su código html y seleccionar los parámetros apropiados para la expresión fill_in .

Estoy siguiendo el Tutorial de Ruby on Rails de Michael Hartl. Cuando uso rspec / capybara, el método fill_in me confunde. Tengo el siguiente código de vista:

<%= f.label :name %> <%= f.text_field :name %>

Este es mi código de prueba:

fill_in "Name", with: "Example User"

Parece que tanto label como text_field son necesarios para fill_in para ubicar el campo de entrada. Si f.label o cambio <%= f.text_field :name %> para que sea <%= f.text_field :another_name %> , la prueba me dará el error ElementNotFound . ¿Alguien puede explicar cómo funciona el fill_in aquí? ¿El campo de entrada y la etiqueta son necesarios para el método fill_in ?


Solo para agregar a los twonegatives publicados. Esto es lo que dicen los capibaras para el método fill_in ():

El campo se puede encontrar a través de su nombre [atributo], id [atributo,] o texto de la etiqueta

http://rubydoc.info/github/jnicklas/capybara/Capybara/Node/Actions:fill_in

Cuando elimino la etiqueta ''Nombre'', puedo usar cualquiera de los siguientes y las pruebas aún pasan:

fill_in ''user_name'', with: "Example User" #locate text field by id attribute fill_in :user_name, with: "Example User" #locate text field by id attribute fill_in ''user[name]'', with: "Example User" #locate text field by name attribute fill_in :''user[name]'' with: "Example User" #locate text field by name attribute

En ruby, algunos caracteres no se pueden usar en un nombre de símbolo a menos que se cite todo el símbolo.

Capybara debe recuperar todos los campos de texto (o áreas de texto) de la página, luego obtener los valores de los atributos id y name (fácil de hacer con algo así como Nokogiri) y luego verificar si el valor es igual al primer argumento para fill_in () (después de convertir el primer argumento en una cadena a to_s ()).


Proporcioné mis 2 centavos aquí: Carpincho no encuentra elementos de forma .

Si llamas a Rails text_field helper con guión bajo (: first_name), el DOM se representa como "First name" y es lo que necesitará Capybara. No es necesario un atributo id.

Vista: <%= form.text_field :first_name %>

Prueba: fill_in "First name", with: ''Elaine''