2012-07-08 68 views
4

我正在尝试学习RoR跟在this tutorial之后,我目前在第3章。如果逐行跟随它,教程会正常工作。但是,本教程中使用的命令会抑制默认测试的生成。当我试图保留它们并可能在我的项目中使用它们时,我总是在某个地方撞墙。使用Rspec和Capybara建立一个新的RoR项目

你能告诉我我做错了什么吗?

$ rails new myproject 
$ cd myproject/ 
$ echo "gem 'rspec'" >> Gemfile 
$ echo "gem 'rspec-rails'" >> Gemfile 
$ echo "gem 'capybara'" >> Gemfile 
$ bundle install 
$ bundle --binstubs 
$ rails generate rspec:install 
$ rails generate controller StaticPages home help about 

然后我编辑spec/views/static_pages/home.html.erb_spec.rb文件,以测试是否水豚工作:

require 'spec_helper' 
#require 'capybara' 
#require 'capybara/rails' 
#require 'capybara/rspec' 

describe "static_pages/home.html.erb" do 
    it 'should have a right title' do 
    visit '/static_pages/home' 
    page.should have_selector('title', :text => 'Home') 
    end 
end 

运行bin/rspec在这一点上,显然,最终以失败。那么,可能会有失败。这些失败的一个原因更为惊人,虽然:

1) static_pages/home.html.erb should have a right title 
    Failure/Error: visit '/static_pages/home' 
    NoMethodError: 
     undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_5:0x00000003dfd268> 
    # ./spec/views/static_pages/home.html.erb_spec.rb:7:in `block (2 levels) in <top (required)>' 

visit方法,其中AFAIK是水豚的一部分,一直没有找到。取消注释home.html.erb_spec.rb中的三个额外要求不会改变结果中的任何内容。

任何想法我做错了什么?或者我应该做的更好?

Rails的版本:3.2.6

+0

如果将'require capybara'移动到spec_helper文件中会发生什么? – ScottJShea 2012-07-08 09:31:42

+0

@ScottJShea同样,我害怕。 – kamilk 2012-07-08 09:56:51

回答

3

把你的测试中requests目录,而不是views

+0

谢谢,它工作:)但是,那么,为什么呢? – kamilk 2012-07-08 09:55:55

+1

因为你在这里做的不是视图测试,而是一个整合测试。视图测试仅用于测试孤立渲染视图。因此,通过将你的测试放在'views'文件夹中,你没有提供'visit'方法,因为它不用于视图测试。 – jdoe 2012-07-08 09:59:16

+0

谢谢。所以我想一个更好的解决方案是使用我忘记的教程中的命令,'rails generate integration_test static_pages'? – kamilk 2012-07-08 10:08:10

相关问题