23

使用 Test::Unit 和 Shoulda。试图测试Users.create。我的理解是 Rails 表单为这样的对象发送参数:

user[email]

这在你的行动中变成了哈希,对吧?

params[:user][:email]

好的,所以在我的测试中,我尝试过......

setup { post :create, :post => { 'user[email]' => 'invalid@abc' } }

setup { post :create, :post => { :user => { :email => 'abc@abcd' } } }

在这两种情况下,在我的行动中,params[:user]都是零。

4

2 回答 2

45
post :create, :user => { :email => 'foo@bar.com' }

get、post、put、delete所有测试方法的通用形式如下:

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

在测试中,params 哈希直接发送到params您的控制器操作中,无需任何类型的转换。即使进行集成测试,您也确实不需要测试此字符串以进行参数转换,因为 rails 框架测试很好地涵盖了它。另外,所有需要参数的测试方法都以这种方式接受哈希,而不会抱怨,这让您的事情变得容易。

于 2009-02-09T19:59:03.453 回答
8
post :create, {:post => {}, :user => {:email => 'abc@abcd'} }

在这种情况下,params[:post] 是 {},params[:user] 是 {:email => 'abc@abcd'},params[:user][:email] 是 'abc@abcd'。

post :create, {:post => {:user => {:email => 'abc@abcd'} } }

在这种情况下 params[:post][:user][:email] 是 'abc@abcd'

于 2009-04-25T03:31:03.807 回答