Миграция из Вебрата в Капибару ... безуспешно - PullRequest
7 голосов
/ 22 мая 2011

Надеясь, что кто-нибудь увидит то, что я упустил ...

Я пытаюсь заставить Капибару работать в небольшом существующем приложении ... и мне не повезло.

Gemfile:

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

Подобные спецификации в двух местах не работают по разным причинам.Не знаете почему?

spec / controllers / 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

Сбои: (возможно, тянет в некоторыхобщая страница в качестве документа в браузере: "<!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

Сбои:

  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)>'

Ответы [ 4 ]

14 голосов
/ 10 ноября 2011

Просто возникла та же проблема, и выяснилось, что капибаре нужно:

response.body.should have_selector("title")

webrat не нужен .body

Кроме того, убедитесь, что вы рендеринг видов, например:.

describe PagesController do
  render_views
1 голос
/ 21 ноября 2011

Вы должны включить DSL капибары в свой тестовый файл:

require 'spec_helper'

    describe PagesController do

    include Capybara::DSL

      describe "GET 'about'" do
        it "should be successful" do 
      ...
0 голосов
/ 17 декабря 2011

Убедитесь, что в вашем файле spec_helper.rb вверху есть следующее:

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

У меня была такая же проблема, как и у вас (т. Е. undefined method 'visit'), и появление этих строк решило проблему.

0 голосов
/ 22 мая 2011

Это не решит все ваши проблемы, но вместо:

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

попытайтесь:

page.should match(/About/i)

(вам может даже не понадобиться page ).

Также убедитесь, что в Capybara настроено использование CSS-запросов в env.rb (по умолчанию XPath).

...