1

私は現在、Michael Hartl による Ruby on Rails チュートリアルを読んでおり、チュートリアルのセクション 3.2.2 で、RSpec を使用してページのタイトルをテストする方法について話しています。私のテスト (彼のチュートリアルに従って自分で書いたもの) は、タイトル テストに失敗し続け (タグを見つけることができますが、タイトルは常に空白の文字列です)、Google で検索すると、render_views渡す関数を含める必要があることがわかりました。テスト。私の問題は、何を試しても RSpec が for を返すことNoMethodErrorですrender_views。私が試したこと:

  • config.render_viewsspec_helper.rb
  • describe "Static Pages" do render_views ... end仕様ファイルで
  • describe "Static Pages" do RSpec::Rails::ViewRendering.render_views ... end仕様ファイルで

それらはすべて a を返しますNoMethodError

私は彼の Gemfile を正確にフォローしていないので、Ruby と関連する gem のバージョンは次のとおりです。

  • ルビー: 1.9.3-p125
  • レール: 3.2.9
  • rspec: 2.12.0
  • rspec-rails: 2.12.0
  • カピカブラ: 2.0.1

Windows 7 の RubyMine 4.5.4 で作業しています。ただし、コマンド プロンプトでテストを実行すると、同じエラーが返されます。仕様ファイルは次のstatic_pages_spec.rb場所にあります。spec/requests

私のコードstatic_pages_spec.rb

require_relative '../spec_helper'

describe "Static Pages" do
  #RSpec::Rails::ViewRendering.render_views, returns NoMethodError
  #render_views, returns NameError

  describe "Home Page" do
    it "should have the h1 'Sample App'" do
      visit '/static_pages/home'
      page.should have_selector('h1', :text => "Sample App")
    end

   it "should have the title 'Home'" do
      visit '/static_pages/home'
      page.should have_selector('title', :text => "Ruby on Rails Tutorial Sample App | Home")
    end
  end

  describe "Help Page" do
    it "should have the h1 'Help'" do
      visit '/static_pages/help'
      page.should have_selector('h1', :text => "Help")
    end

    it "should have the title 'Help'" do
      visit '/static_pages/help'
      page.should have_selector('title', :text => "Ruby on Rails Tutorial Sample App | Help")
    end
  end

  describe "About Page" do
    it "should have the h1 'About Us'" do
      visit '/static_pages/about'
      page.should have_selector('h1', :text => "About Us")
    end

    it "should have the title 'About Us'" do
      visit '/static_pages/about'
      page.should have_selector('title', :text => "Ruby on Rails Tutorial Sample App | About Us")
    end
  end
end

Myspec_helper.rbは、でプロジェクトを作成した後にspec_helper.rb実行を作成することによって自動的に生成され、次の行がブロックに追加されます。rails generate integration_test--no-test-frameworkconfig

# Fix NoMethodError for method 'visit'
config.include Capybara::DSL

config.include Capybara::RSpecMatchers

EDIT いくつかのテストの後、rspec 2.12.0とrspec-rails 2.12.0を使用し、render_viewsを使用せに、カピバラのバージョンを1.1.2に変更することでテストに合格することができました。テストに合格したことは喜ばしいことですが、render_viewsメソッドが見つからないという問題はまだ解決されていません。

4

2 に答える 2

3

さて、もう少しテストした後、欠落しているrender_viewsメソッドの謎が解決されました。レンダリングビューメソッドを含めるには、またはスペックファイルで呼び出す前に、明らかconfig.include RSpec::Rails::ViewRenderingにが必要です。spec_helperconfig.render_viewsspec_helperrender_views

第二に、合格または不合格のテストに関しては、問題はカピバラ自体にあるようです。どうやら、visit1.1.2と2.0.1でメソッドが実装される方法は、返されるものが大幅に異なるようです。を含めた後でもrender_views、テストは失敗します(を使用せずにconfig.include Capybara::RSpecMatchers)。ただし、これを使用すると、その実装についての洞察が得られるようです。の使用に関するCapybaraからの失敗メッセージはRSpecMatchers、HTMLではなくCSSを探しているというものです。なぜ失敗するのかを完全に理解しているとは言えませんが、Capybara 2.0.1でテストが失敗し、1.1.2でテストに合格する理由について誰かに教えてもらえれば、それは素晴らしいことです。

于 2012-12-12T16:39:44.740 に答える
0

Capybara 2.0 では、すべてのテストをspec/requests ではなく、spec/featuresに含める必要があります。

ここですべてを読むことができます。

少なくとも初心者の頃は、Hartl のチュートリアルに記載されているバージョンに固執することをお勧めします。チュートリアルをより速く進めるのに役立ちます!

于 2012-12-12T14:30:28.147 に答える