2011-12-31 16 views
4

私はCapybaraをうまく動作させることができません。has_textは定義されていないメソッドです。Capybara&RSpec

新しいレール3.1プロジェクト(rails new test -T)を作成しました。

Gemfile:私はスペックフォルダをインストールしている

source 'http://rubygems.org' 

gem 'rails', '3.1.3' 

gem 'sqlite3' 

group :assets do 
    gem 'sass-rails', '~> 3.1.5' 
    gem 'coffee-rails', '~> 3.1.1' 
    gem 'uglifier', '>= 1.0.3' 
end 

gem 'jquery-rails' 

group :test do 
    gem 'rspec-rails' 
    gem 'capybara' 
end 

rails g rspec:install

スペック/ spec_helper.rb:

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

Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} 

RSpec.configure do |config| 
    config.mock_with :rspec 
    config.fixture_path = "#{::Rails.root}/spec/fixtures" 
    config.use_transactional_fixtures = true 
    config.infer_base_class_for_anonymous_controllers = false 
end 

そして最後に私のテストファイル:

require 'spec_helper' 

feature "the test" do 
    scenario "GET /" do 
    visit('/') 
    page.should have_text('Welcome aboard') 
    end 
end 

だから私はRSpecの起動:bundle exec rspec spec/my_test.rb、これは誤りです:

ほとんど
F 

Failures: 

    1) the test GET/
    Failure/Error: page.should have_text('Welcome aboard') 
    NoMethodError: 
     undefined method `has_text?' for #<Capybara::Session> 
    # ./spec/my_test.rb:6:in `block (2 levels) in <top (required)>' 
+0

KL-7、あなたは私の質問で何を変えましたか?私はそれを書いたときとまったく同じように見ます。実際、私は2つのバージョンの差分を作成しており、それらは同じです。 –

+0

何も特別なことは心配しないでください。最初の文の中にバッククォートで 'has_text'をラップするだけで、もう少し目立つようになりました。リビジョン履歴で見ることができます。 –

+0

改訂履歴はどこですか? (私はまだそのオプションを見つけられていないので、ただ知っている)。 –

答えて

5

現在の安定版であるcapybara 1.1.2を使用している可能性がありますが、そうではありません方法はhas_text?です。代わりにhas_content?(対応するhave_contentマッチャー)を使用するか、Skydreamerが提案したようにgithubリポジトリから直接capybaraを使用することができます。

has_content?は、READMEで説明されているとおり、少し異なる動作をしています。一方、リポジトリから直接Gemを使用することは、このバージョンがあまり安定していない可能性があるため、必ずしも安全ではありません。

関連する問題