2012-03-22 80 views
1

在Michael Hartl的新Rails Tutorial Book(3.2)的9.2.1節中,定義了一個測試來確保用戶登錄後,他們無法將更改(PUT)更改爲另一個用戶。如果嘗試這樣做,用戶應該被重定向到主頁。由於網頁不能直接發出的說,RSPEC測試使用:第9章授權測試失敗

之前{放user_path(wrong_user)} { response.should redirect_to的(root_path)}

這個測試用例失敗,看記錄它似乎正在退出,因爲UserController中的第一個before_filter(signed_in_user)正在重定向到登錄頁面。

這是我爲這個示例應用程序的github頁: https://github.com/treetopvt/sample_app

回答

1

在第8章中有練習從cookie切換到會話。在我SessionsHelper模塊我換過

cookies.permanent[:remember_token] = user.remember_token 

session[:remember_token] = user.remember_token 

移動向會議工作得很好,但因爲我已不再「永久」存儲的cookie,測試失敗。我解開了第8章的練習變更,回到了cookies,並且所有的測試都通過了。現在,有關如何將我的授權測試更改爲在使用會話時工作的任何想法?這是我目前的測試:

  describe "as wrong user" do 
      let(:user) { FactoryGirl.create(:user) } 
      let(:wrong_user) { FactoryGirl.create(:user, email:"[email protected]") } 
      before { sign_in user } 

      describe "Visiting Users#edit page" do 
       before { visit edit_user_path(wrong_user) } 
       it { should have_selector('title', text: full_title('')) } 
      end 

      describe "submitting a PUT request to the Users#update action" do 
       before { put user_path(wrong_user) } #put is an update? 
       specify{ response.should redirect_to(root_path) } 
      end 
     end 
+0

作者應該爲那些做這個練習的人提及這個案例。真的,我花了數小時才解決它。最後我回到了這個答案。 – 2012-05-01 17:05:43

0

我覺得你有你的章節混淆,9.2.1約爲註銷用戶嘗試使用更新的行動和9.2.2中有關記錄用戶嘗試在其他用戶上使用更新操作。您可能需要檢查您的規格中的before區塊,以確保您正在測試正確的方案。

例如:before { sign_in user }在9.2.2中用於設置登錄用戶,然後當嘗試更新其他用戶的配置文件時,該用戶將被重定向到根路徑。它看起來像根本沒有登錄用戶,所以認證過濾器會停止流並重定向到登錄頁面。

+0

你是對的,它是9.2.2。它似乎是一個登錄用戶不記得的情況。測試之間 – Treetopvt 2012-03-22 19:05:58

+0

在第8章有從餅乾切換到會議實乃我SessionsHelper模塊我換過 cookies.permanent。[:remember_token] = user.remember_token 與 會話[:remember_token] = user.remember_token 會議的舉措運行良好,但由於我不再「永久」存儲cookie,測試失敗。我解開了第8章的練習變更,回到了cookies,並且所有的測試都通過了。 – Treetopvt 2012-03-22 19:11:52

0

請檢查這個Stack Overflow comment。我也面臨同樣的問題,並在sign_in測試助手中替換該行(正如「@Aldo'xoen'Giambelluca」所述)解決了這個問題。只有在第8章中試圖解決練習時纔會遇到問題。正如@Hoang Pham指出的那樣,如果書中提到做這個練習的人會面臨這個問題,那麼它會更好。

相關問題