2013-06-03 42 views
1

這是我們的集成測試用例,它符合spec/features /。 rspec的目的是首先登錄,然後打開用戶菜單頁面並測試使用菜單頁面上的鏈接。這是一個軌道3.2.12應用程序。這裏是RSpec的代碼:爲什麼會話在集成rspec中變爲空散列?

describe "CheckLinks" do 
    describe "GET /check_links" do 
    before(:each) do 

     ...data... 

     visit '/' 
     save_and_open_page  
     fill_in "login", :with => @u.login 
     fill_in "password", :with => 'password' 
     click_button 'Login' 
     #save_and_open_page 
    end 

    it "works" do 
     visit user_menus_path 
     save_and_open_page  
     click_link('Project') 
     save_and_open_page 
     page.body.should have_content('Project#') #('Project Number') 
    end 
    end 

的rpsec錯誤很簡單:

1) CheckLinks GET /check_links works 
    ←[31mFailure/Error:←[0m ←[31mpage.body.should have_content('Project#') #('Project Number')←[0m 
     ←[31mexpected to find text "Project#" in "Login Page"←[0m 
←[36m  # ./spec/features/check_links_spec.rb:116:in `block (3 levels) in <top (required)>'←[0m 

我們發現的是,該會議是empty hashclick_link('project')後,它會導致應用程序以redirect_to signin頁。但是,在代碼執行中,Project鏈接頁面確實將我們帶到項目的索引頁面。爲什麼在0123pec13之後的rspec會話變成empty hash。我們的rspec代碼有問題嗎?感謝幫助。

+0

你在rspec-rails和capybara上使用了哪個版本號? – fontno

+0

rspec-rails:2.13.1,capybora:2.1.0 – user938363

回答

1

有幾件事,首先我不相信你需要在你的測試中使用body。只要做

page.should have_content('Project#') 

此外,請確保無論('Project#')評估是正確的。它試圖從字面上匹配它。這可能是錯誤的,那就是你的失敗。

重要的是,Capybara DSL,pagevisit方法已被移至功能規格。它在請求和控制器規格中不可用。看看文檔的upgrading to capybara 2部分。這可能是你的問題。您可以在spec_helper.rb

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

解決這一點,包括水豚在DSL集成測試通過包括本,但你真的應該做這種試驗的一個功能規範,並按照新的約定。

+0

該帖子中的集成測試確實在spec/features /下(從spec/requests /這是rails g integration_test的默認設置)。規範/要求沒有任何規定 – user938363