2011-03-16 157 views
1

我在測試我的登錄過程時遇到了一些困難。目前,我有以下要求規格:使用水豚/ Rspec測試登錄

 describe "GET /admins" do 
     before(:each) do 
      @admin = Factory.create(:user, :winery => nil, :email => '[email protected]', :admin => true) 
      @attr = { :email => @admin.email, :password => @admin.password } 
     end 


    it "should log admin users in" do 
     visit admin_path 
     post_via_redirect admin_path, :session => @attr 
     save_and_open_page 
     page.should have_content('Admin Dashboard') 
    end 
    end 

這是失敗的,而save_and_open_page,只是表明我的登錄頁面(我可以正常登錄到我的網站的發展,所以實際的代碼工作)。我也嘗試使用Capybara編寫規範來填寫表單並單擊登錄按鈕,同樣的失敗。我已經能夠在黃瓜中寫出一個合格的規格,但只能使用硒。

使用: 水豚(0.4.1.2) Rspec的(2.5.0) RSpec的護欄(2.5.0) 導軌(3.0.5)

感謝

回答

0

在嘗試了各種方法在Rspec和黃瓜中測試這個之後,我終於發現了自己造成的問題。
在我的形式(使用HAML和formtastic)我有以下幾點:

= semantic_form_for @session, :as => :session, :url => { :action => "create" } do |form| 
    = form.inputs do 
     = form.input :email, :label => "Email" 
     = form.input :password, :label => "Password" 
    %fieldset.buttons 
     %ol 
     %li 
      %button(name = "commit" type = "commit" value = "Login")Log In 

這個工作在Chrome和Firefox(如果一個場景被標記@selenium),但在我的測試,而FILL_IN和click_button通過的步驟,我的控制器中的創建操作未被調用。將我的按鈕的代碼更改爲:

= form.input :password, :label => "Password" 
    = form.buttons do 
     = form.commit_button "Log In" 

允許我的測試現在通過。不知道爲什麼,但至少我可以與我的集成測試

+3

不應該按鈕的類型是**提交**?根據規範,提交不是有效的類型 – edk750 2011-09-28 22:32:39

2

您應該使用純這裏的水豚幫手,post_via_redirect是一個Rails方法。您首先要填寫表格,然後按某種提交按鈕,像這樣:

visit admin_path 
fill_in "Login", :with => "username" 
fill_in "Password", :with => "password" 
click_button "Submit" 

你最後的斷言,我會更精確地說,其中選擇器,內容應顯示,如下所示:

within_scope("h1") do 
    page.should have_content('Admin Dashboard') 
end 

現在您正在測試正確!

+0

我已經嘗試過這與純水豚步驟,具有相同的問題。嘗試測試普通用戶的登錄時,我也遇到了這個問題。我的身份驗證基本上是從railstutorial網站複製而來的,並且工作正常,我似乎無法對其進行測試。 – dasBoots 2011-03-16 11:54:28