rails rack_test feature example and ruby-on-rails ruby rspec bdd

rack_test - Escribiendo una especificación para ayudante con Ruby on Rails y RSpec



ruby capybara github (5)

Analizar html con expresiones regulares realmente está reinventando la rueda. Eso es demasiado trabajo para mí: demasiado inflexible y demasiado propenso a errores. (Vea esta respuesta sarcástica pero hilarante y precisa de SO sobre el razonamiento)

Si necesita analizar la salida html de sus ayudantes, puede probar la gema rspec-html-matchers . A diferencia de webrat, parece jugar bien con RSpec 3.

Entonces tú puedes:

expect(helper.title).to have_tag(''title'', text: ''What you expect'')

He estado escribiendo especificaciones para controladores y modelos, pero nunca he escrito una especificación de ayuda. No tengo idea de por dónde empiezo.

Tengo el siguiente fragmento de código en application_helper.rb

def title(page_title) content_for(:title) { page_title } end

  • ¿Cómo debo escribir una especificación de ayuda en el código?
  • Además, si hay alguna aplicación de código abierto de Rails para mostrar las pruebas / especificaciones de un buen ayudante, hágamelo saber.

De los documentos de rspec-rails en las especificaciones de ayuda :

Las especificaciones de los ayudantes viven en spec / helpers, y se mezclan en ActionView :: TestCase :: Behavior.

Proporciona un objeto auxiliar que se mezcla en el módulo auxiliar que se especificó, junto con ApplicationHelper (si está presente).

require ''spec_helper'' describe ApplicationHelper do describe "#title" do it "displays the title" do # helper is an instance of ActionView::Base configured with the # ApplicationHelper and all of Rails'' built-in helpers expect(helper.title).to match /Some Title/ end end end


Es posible usar esta sintaxis cuando especifique ayudantes

Supongamos que este es tu ayudante

module ApplicationHelper def page_title @title || nil end end

Entonces puedes especificarlo con esta sintaxis.

require "spec_helper" describe ApplicationHelper do describe "#page_title" do it "returns the instance variable" do assign(:title, "My Title") helper.page_title.should eql("My Title") end end end


RSpec debería cargar automáticamente las clases y los módulos de su entorno de rieles cuando los "describe", por lo que una especificación de ayudante válida podría ser:

#deleted

Pero recuerde que bdd no está probando todos los métodos, sino el comportamiento de su aplicación.

editar:

como dijo @Ken, mi especificación no era correcta, definitivamente era la forma incorrecta de hacerlo. Así que saqué una solución de especificaciones de solicitud que me gusta más que una especificación de ayudante.

# inside your helper def title=(page_title) content_for(:title) { page_title } end # views/resource/index.html.erb <% title = "foo" %> # views/layouts/application.html.erb <%= yield :title %> # request spec require ''spec_helper'' describe YourResource do it "should output content for title" get "/resource" response.body.should =~ /<title>foo<//title>/ end end

de lo contrario, si desea probar solo el comportamiento del ayudante (porque es crítico o porque no tiene ninguna opinión) @ la solución de Ken es mejor.


También es posible incluir a su ayudante dentro de la clase de prueba de la siguiente manera:

describe ApplicationHelper do helper ApplicationHelper it "should work" do my_helper_method("xyz").should == "result for xyz" end end

Trabajó para mí con Rails 3.