render_views返回NoMethodError

时间:2012-12-12 13:11:33

标签: ruby-on-rails ruby-on-rails-3 rspec2 rspec-rails

我目前正在阅读Michael Hartl的Ruby on Rails教程,在本教程的第3.2.2节中,他谈到了使用RSpec来测试页面的标题。我的测试(我自己编写,遵循他的教程)一直没有通过标题测试(它可以找到标签,但标题总是一个空白字符串),并且一些搜索谷歌告诉我,我需要包含函数{{1通过测试。我的问题是无论我尝试什么,RSpec都会为render_views返回NoMethodError。我尝试过的事情:

    render_views
  • config.render_views 规范文件中的
  • spec_helper.rb
  • 规范文件中的
  • describe "Static Pages" do render_views ... end

所有这些都返回describe "Static Pages" do RSpec::Rails::ViewRendering.render_views ... end

我没有完全关注他的Gemfile,所以Ruby和相关宝石的版本是:

  • Ruby:1.9.3-p125
  • rails:3.2.9
  • rspec:2.12.0
  • rspec-rails:2.12.0
  • capycabra:2.0.1

我在Windows 7上使用RubyMine 4.5.4。但是在命令提示符下运行测试会返回相同的错误。规范文件为NoMethodError,位于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 是在使用spec_helper.rb创建项目后创建正在运行的spec_helper.rb自动生成的rails generate integration_test,这些行添加在--no-test-framework块中:

config

修改 经过一些测试,我已经设法通过将capybara版本更改为1.1.2来完成测试,同时仍然使用rspec 2.12.0和rspec-rails 2.12.0以及使用render_views 。虽然我很高兴测试正在通过,但它仍然无法解决丢失# Fix NoMethodError for method 'visit' config.include Capybara::DSL config.include Capybara::RSpecMatchers 方法的问题,如果我尝试使用它,它仍然会出现。

2 个答案:

答案 0 :(得分:3)

嗯,经过一些测试后,解决了丢失的render_views方法之谜。要包含渲染视图方法,在调用规范文件中config.include RSpec::Rails::ViewRenderingspec_helper中的config.render_views之前,需要spec_helper显然需要render_views

其次,关于测试通过或失败,问题似乎在Capybara本身。显然,似乎{1.1}和2.0.1中visit方法的实现方式与它返回的方式有很大不同;即使在包含render_views之后,测试仍然失败(不使用config.include Capybara::RSpecMatchers)。使用它似乎可以提供对其实现的深入了解; Capybara关于使用RSpecMatchers的失败消息是它正在寻找CSS而不是HTML。但是,我没有声称完全理解它失败的原因,所以如果有人能够告诉我为什么Capybara 2.0.1导致测试失败而1.1.2允许测试通过,那就太棒了。

答案 1 :(得分:0)

Capybara 2.0要求所有测试都在 spec / features 中,而不是在spec / requests中。

您可以阅读所有相关内容here

我建议您坚持使用Hartl教程中提到的版本,至少在您的初学者时代。将帮助您更快地完成本教程!