我目前正在阅读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和相关宝石的版本是:
我在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
方法的问题,如果我尝试使用它,它仍然会出现。
答案 0 :(得分:3)
嗯,经过一些测试后,解决了丢失的render_views
方法之谜。要包含渲染视图方法,在调用规范文件中config.include RSpec::Rails::ViewRendering
或spec_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教程中提到的版本,至少在您的初学者时代。将帮助您更快地完成本教程!