2012-12-06 27 views
7

使用rspec和capybara開發新的Rails 3.2.9應用程序。爲什麼要求規格中沒有水豚?

我已經中的Gemfile如下:

gem 'rspec-rails' 
gem 'capybara' 

和投機/ spec_helper.rb如下:

require 'rspec/rails' 
require 'capybara/rspec' 

和投機/請求/ asdf_spec.rb:

require 'spec_helper' 
describe 'Asdf' do 
    describe "GET /asdfs" do 
    it "should list asdfs" do 
     visit asdfs_path 
    end 
    end 
end 

此測試失敗:

Failure/Error: visit asdfs_path 
NoMethodError: 
undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_2::Nested_1:0x007fa7b68961a0> 
# ./spec/requests/asdfs_spec.rb:19:in `block (4 levels) in <top (required)>' 

所以它看起來像水豚沒有得到加載。確定,爲什麼不呢?我覺得我在十幾次之前完成了同樣的事情......可能會在一些愚蠢的事情上消失。

+0

您是否使用Capybara 2.0? –

+1

是的,我是!我的谷歌搜索功能很弱。 –

回答

13

所以這是一個水豚版本2的變化。我發現這一點:

http://alindeman.github.com/2012/11/11/rspec-rails-and-capybara-2.0-what-you-need-to-know.html

這也解釋:

在升級至2.0水豚,水豚不會被 默認在RSpec的要求規範可用。相反,一種新的規格 - 功能規格 - 已經創建用於水豚。

要升級到2.0水豚,你需要做的幾件事情:

  • 升級RSpec的護欄到2.12.0或更高
  • 移動使用水豚從規格/請求任何測試規格/功能。水豚 測試使用訪問方法並且通常對頁面聲明。
+0

在將特性測試移至** spec/requests **的** spec/features **之前的臨時過程中,您可以通過使用'type :::feature'標記您的套件再次傳遞。 –

+0

Capybara 1.1.2還提供了一些在請求規格(例如,have_selector)中非常有用的匹配器,除非您將請求規格轉換爲功能規格,否則這些匹配器將不再可用。 –

-2

問題出在水豚寶石本身。

gem 'capybara', '1.1.2'解決了這個問題(2.0.x版本失敗)

+13

是的,這是一個版本2.x的問題。但是來吧,答案不是降級。 :) –

3

不僅僅是因爲與水豚升級到2.x同樣的問題,任何人一些額外的信息。查看Upgrading to Capybara 2部分下的rspec-rails文檔。

基本上,爲了使用Capybara DSL(頁面&訪問),您必須將您現有的規格移動到spec/features目錄中。因此,您只能在驗收測試中使用page & visit。在控制器和請求規格中不再訪問頁面&。控制器和請求規格只允許使用機架測試DSL (get|post|put|delete|head/response.body)

這是建議,但有一種方式,讓您的規格工作,因爲它們是:

RSpec.configure do |c| 
    c.include Capybara::DSL, :example_group => { 
    :file_path => "spec/requests" 
    } 
end 

該文檔的狀態,如果你走這條路,那麼你將覆蓋預期的行爲和你承擔風險。

絕對不會將此作爲不升級到Capybara 2.x的原因。功能規格很容易習慣且易於閱讀。 feature只是describe的別名,backgroundbefore,scenario對於itgiven對於let的別名。

希望這可以幫助任何人對新變化感到困惑。

相關問題