【问题标题】:render_views returning NoMethodErrorrender_views 返回 NoMethodError
【发布时间】:2012-12-12 13:11:32
【问题描述】:

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

  • config.render_viewsspec_helper.rb
  • describe "Static Pages" do render_views ... end 在规范文件中
  • describe "Static Pages" do RSpec::Rails::ViewRendering.render_views ... end 在规范文件中

他们都返回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

我的spec_helper.rb 是使用--no-test-framework 创建项目后通过创建运行rails generate integration_test 自动生成的spec_helper.rb,并在config 块中添加这些行:

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

config.include Capybara::RSpecMatchers

编辑 经过一些测试,我设法通过将 capybara 版本更改为 1.1.2 来通过测试,同时仍然使用 rspec 2.12.0 和 rspec-rails 2.12.0 并且 not 使用 render_views。虽然我很高兴测试通过了,但它仍然不能解决缺少 render_views 方法的问题,如果我尝试使用它,它仍然会出现。

【问题讨论】:

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


    【解决方案1】:

    好吧,经过多一点测试,render_views 方法丢失的谜团就解决了。要包含渲染视图方法,显然需要 spec_helper 中的 config.include RSpec::Rails::ViewRendering,然后在规范文件中调用 spec_helperrender_views 中的 config.render_views

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

    【讨论】:

      【解决方案2】:

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

      您可以阅读所有相关信息here

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

      【讨论】:

      • 更改文件夹名称实际上并没有解决任何问题。我很确定这个问题实际上与 rspec 而不是 capybara 有关,因为给出问题的方法来自 rspec 而不是 capybara。另外,无论如何,知道这个问题的解决方案会很好,因为一旦我开始构建新应用程序,无论如何我可能会遇到这个问题。
      • 教程中的render_views版本替换成默认版本后能否试试:访问'/static_pages/home'?或者,您可以在原始问题中复制/粘贴完整的 spec_helper 文件吗?
      猜你喜欢
      • 2019-05-20
      • 2018-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多