2009-02-09 28 views
20

使用Test :: Unit和Shoulda。試圖測試Users.create。我的理解是,Rails窗體爲這樣的對象發送參數:如何在Rails測試中指定POST參數?

user[email] 

在你的動作中會變成散列,對嗎?

params[:user][:email] 

OK,所以在我的測試中,我已經試過......

setup { post :create, :post => { 'user[email]' => '[email protected]' } } 

setup { post :create, :post => { :user => { :email => '[email protected]' } } } 

在這兩種情況下,比我的行動,params[:user]是零。

回答

43
post :create, :user => { :email => '[email protected]' } 

爲GET,POST,放,刪除的所有測試方法的一般形式如下:

def post(action_name, params_hash = {}, session_hash = {}) 

而且在測試中,params哈希表被直接發送到您的控制器操作的params沒有任何翻譯。即使進行集成測試,你也不需要測試這個字符串,以便通過rails框架測試很好地覆蓋翻譯。另外,所有需要參數的測試方法都會以這種方式接受散列,而無需投訴使您的工作變得輕鬆。

+0

這也是要去工作:「後:創建,{:電子郵件=>「富@ bar.com'}「,從控制器端你會得到:params [:email]給你'[email protected]' – nisevi 2015-05-13 05:27:27

6
post :create, {:post => {}, :user => {:email => '[email protected]'} }

在這種情況下PARAMS [:交]是{}, PARAMS [:用戶]是{:電子郵件=> 'ABC @ ABCD'}, PARAMS [:用戶] [:電子郵件]是「 ABC @ ABCD」。

post :create, {:post => {:user => {:email => '[email protected]'} } }

在這種情況下PARAMS [:交] [:用戶] [:電子郵件]名爲 'abc @ ABCD'