2011-05-22 21 views
7

Con la esperanza de que alguien podría ver lo que he pasado por alto ...Migración de Webrat a Carpincho ... sin éxito

Estoy intentando conseguir Carpincho trabajando en una pequeña aplicación existente ... y no estoy teniendo alguna suerte.

Gemfile:

group :development, :test do 
    gem 'rspec-rails' 
    # gem 'webrat' 
    gem 'capybara', :git => 'git://github.com/jnicklas/capybara.git' 
    end 
    ... 

especificaciones similares en dos lugares están fallando por diferentes razones. No estoy seguro por qué?

spec/controladores/pages_controller_spec.rb:

require 'spec_helper' 

describe PagesController do 

    describe "GET 'about'" do 
    it "should be successful" do 
     # get 'about'       #worked w/ webrat 
     # response.should be_success   #worked w/ webrat 
     visit pages_about_path 
     # page.should have_content('About Us') 
     page.html.should match(/About/i) 
    end 

    it "should have title" do 
     # get 'about'       #webrat 
     # response.should have_selector("title", :content => "About Us") #webrat 
     visit pages_about_path     
     page.should have_selector("title")  
    end 
    end 
end 

fracasos: (puede estar tirando de alguna página genérica como tipo de documento en el navegador es "<!DOCTYPE html>")

1) PagesController GET 'about' should be successful 
    Failure/Error: page.html.should match(/About/i) 
     expected "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n\n" to match /About/i 
    # ./spec/controllers/pages_controller_spec.rb:13:in `block (3 levels) in <top (required)>' 

    2) PagesController GET 'about' should have the right title 
    Failure/Error: page.should have_selector("title") 
     expected css "title" to return something 
    # ./spec/controllers/pages_controller_spec.rb:20:in `block (3 levels) in <top (required)>' 

spec/views/pages/about.html.haml_spec.rb:

require 'spec_helper' 

describe "pages/about.html.haml" do 
    it "renders attributes in <p>" do 
    # render #webrat 
    # rendered.should match(/About/) #webrat 
    visit pages_about_path 
    page.should have_content("About Us") 
    end 

    it "should have the right heading" do 
    # render #webrat 
    # rendered.should have_selector("h2", :content => "About Us") #webrat 
    visit pages_about_path 
    page.should have_selector("h2") 
    end 
end 

fracasos:

1) pages/about.html.haml renders attributes in <p> 
    Failure/Error: visit pages_about_path 
    NoMethodError: 
     undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_1:0x00000101dc2970> 
    # ./spec/views/pages/about.html.haml_spec.rb:8:in `block (2 levels) in <top (required)>' 

    2) pages/about.html.haml should have the right heading 
    Failure/Error: visit pages_about_path 
    NoMethodError: 
     undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_1:0x000001034b1d98> 
    # ./spec/views/pages/about.html.haml_spec.rb:16:in `block (2 levels) in <top (required)>' 
+0

Marque a nigelr (o a quien considere que se lo merece) como la respuesta aceptada para otros que puedan tener este problema y como cortesía común. – KobeJohn

Respuesta

14

Sólo tenían el mismo problema y encontró que capibara necesita:

response.body.should have_selector("title") 

webrat no necesita el .body

Además, asegúrese de vistas se renderiza, por ejemplo :.

describe PagesController do 
    render_views 
+0

Esta es la respuesta. Además, si vienes de railstutorial.org, creo que también necesitas cambiar: content => "whatever" a: title => "whatever". De lo contrario, pasa independientemente del contenido. – KobeJohn

+0

Creo que yakiimo significa que 'have_selector (" title ",: content =>" Home ")' pasa a ser 'have_selector (" title ",: text =>" Home ")'. También encontré que 'have_selector (" a ",: href =>"/users? Page = 2 ",: content =>" Next ")' cambia a 'have_link (" Next ",: href =>"/users? página = 2 ")'. Estoy encontrando útiles los ejemplos de antes y después en esta publicación del blog: [Migrando de Webrat a Capybara] (http://zadasnotes.blogspot.com/2011/08/migrating-from-webrat-to-capybara.html) –

0

Esto no va a solucionar todos sus problemas, pero en lugar de:

page.html.should match(/About/i) 

intento:

page.should match(/About/i) 

(que podría ni siquiera necesita página).

Además, compruebe que tiene Capibara configurado para usar consultas CSS en env.rb (por defecto es XPath).

+0

Quitando el 'html'. no funcionóAdemás, Capibara me lee: "El carpincho no trata de adivinar qué tipo de selector le vas a dar, y ** siempre usará CSS por defecto **. Si quieres usar XPath, tendrás que hacer ... "Ver error" ** método indefinido 'visitar '**" me hace pensar que Capybara no está instalado o referenciado correctamente ... ¡pero no estoy seguro de cómo confirmarlo!?! – Meltemi

+0

Hmm, el env.rb Cucumber genera dice "El carpincho se predetermina a los selectores de XPath en lugar del predeterminado de Webrat de CSS3". Pero sí, parece que no capta Capibara. ¿Has intentado correr a través de Bundler? paquete exec pepino –

+0

sin usar pepino ... realmente no quiero ... ¿es que tal vez el problema? – Meltemi

1

Debe incluir DSL capibara en su archivo de prueba:

require 'spec_helper' 

    describe PagesController do 

    include Capybara::DSL 

     describe "GET 'about'" do 
     it "should be successful" do 
     ... 
0

Asegúrese de que su archivo spec_helper.rb tiene la siguiente en la parte superior:

ENV["RAILS_ENV"] ||= 'test' 
require File.expand_path("../../config/environment", __FILE__) 
require 'rspec/rails' 
require 'rspec/autorun' 
require 'capybara/rspec' 

tuve un problema similar como la suya (es decir, undefined method 'visit') y apareciendo esas líneas resolvió el problema.

Cuestiones relacionadas