Trabajando en una extensión para Spree, al generar controladores, por ej. con

rails g controller Fake show

el generador me genera(generalmente, las redundancias valen)

require 'spec_helper'

describe FakeController do

describe "GET 'show'" do
  it "returns http success" do
    get 'show'
    response.should be_success
  end
end

end

yo, viejo desarrollador Rake/Test (aónde..) pensé

harto fome rspec, sólo usa bloques en vez de métodos…

pero el test se caía con

Failure/Error: get 'show'
ActionController::RoutingError:
  No route matches {:controller=>"fake", :action=>"show"}

en su momento para salir del paso, por ahí allé que podía incluir la sintaxis de Capybara en el spec/spec_helper.rb

Rspec.configure do |c|
  # ...
  c.include Capybara::DSL
end

y así es como terminé reemplazando el primer test por algo así como

it "returns http success" do
  visit spree.fake_path
  response.should be_success
end

lo cual pasaba (o eso creía) y con el tiempo fue creciendo esta big ball of mud
hasta que tuve que testear variables de sesión y me encontré con que siempre

session = {}

Capybara dice, no obstante, que no tiene acceso a los requests ni sesión de lo que deduje que éste mi problema era:
estar ejecutando los test con un framework y probando los resultados con otro (Rake/Test).
De hecho, investigando más, Capybara ya no funciona para los controladores – los cuales en RSpec ni siquiera renderean las vistas, por lo que hay que estar poniéndole

describe "algun test" do
  render_views #!
  it "el payaso dia.." do

– sino que desde su v.2 se incluye sólamente en los test declarados dentro de la carpeta spec/features (¿lo cual es igual a integración con Cucumber? tarea para la casa).
‘Jigsaw falling into place’ – como diría mi camarada CDV – me encuentro ahora separando los tests de cotroladores según su especificación que es en el fondo Rake/Test en bloques y con las expectations de Rspec, etc. – pero no Capybara,

bonnus track

ah claro, y para resolver el No route matches de más arriba (el culpable de todo ésto), sucede porque Spree es un Engine, por lo tanto sus rutas deben ser incluídas así

require 'spec_helper'

routes { Spree::Core::Engine.routes } # !!

describe FakeController do
  describe "..." do
Este sitio utiliza cookies.    Leer más