2012-11-27 11 views
3

我剛剛從水豚2.0.0.beta2更新了一個rails應用程序包到當前的2.0.1版本。 (剛好在測試版上。)我還將Rspec從2.11.0更新到了2.12.0,以便與包含url助手的一些更改兼容。用水豚測試特定的發佈請求(表單黑客入侵,權限保護)

在此更新之前,我進行了一些測試,驗證諸如非管理員用戶無法創建新用戶和類似權限/表單黑客基礎知識等事情。我也有規格來驗證是否涵蓋了質量指派攻擊。這是仙女容易,工作得很好,但現在爲我打破。

context "non-admin users can" do 
    before(:each) do 
    login_as_user 
    end 
    it "Not create new users" do 
    page.driver.post users_path, { :params => { 
     user_name: "user1", 
     user_email: "[email protected]", 
     user_password: "124mgldkg3", 
     user_role: "user" 
    } } 
    page.status_code.should be 302 
    end 
end 

它語句只能儘量去(參觀)地方未經批准的工作就好了,但我不能再這樣一個形式的操作後,這類的用戶不應該被允許張貼。我現在得到一個404任何和所有這些請求。

我完全不知道水豚和/或Rspec有什麼變化。這當然可能是一些小的細節,導致我的請求「脫離背景」。它看起來像是請求在沒有與訪問和表單帖子相同的會話和請求上下文的情況下執行。

我想:

  • 後使用定製參數,對用戶不可見的形式。
  • 仍然是在現有的會話,並要求方面(子域...)

我還沒有找到替代技術。我開始下了Rack :: Test路徑,但後來我絕對回到了第一個平臺,沒有登錄或會話....這表明,可能有一些方法來手動檢查這些常見的黑客嘗試,而不是設置所有會話上下文東西capybara爲我處理。

回答

3

在水豚內部挖後,我發現,當前的工作方式進行自定義後的要求是做到以下幾點:

context "User class users can" do 
    before(:each) do 
    login_as_user 
    end 
    it "Not create new users" do 
    page.driver.browser.reset_host! # just to be safe 
    page.driver.browser.process(:post, users_path, { params: { 
     user_name: "user1", 
     user_email: "[email protected]", 
     user_password: "124mgldkg3", 
     user_role: "user" 
    }}) 
    page.status_code.should be 302 
    end 
end 

這相當於在行爲上我原來的代碼(在上面的問題) 。