如何在 Rails 测试中指定 POST 参数?

发布于 2024-07-13 13:40:42 字数 510 浏览 7 评论 0原文

使用 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] 为零。

Working with Test::Unit and Shoulda. Trying to test Users.create. My understanding is that Rails forms send params for an object like this:

user[email]

Which turns into hash in your action, right?

params[:user][:email]

OK, so in my test I've tried...

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

and

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

In both cases, over in my action, params[:user] is nil.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

凶凌 2024-07-20 13:40:42
post :create, :user => { :email => '[email protected]' }

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

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

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

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

The general form for all the test methods of get, post, put, delete are as follows:

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

And in tests, the params hash gets directly sent into params of your controller action with no translation of any sort. Even doing integration testing you really shouldnt need to test this string to params translation as its covered very well by the rails framework tests. Plus all testing methods that need params accept a hash in this manner without complaint making things easy for you.

夏有森光若流苏 2024-07-20 13:40:42
post :create, {:post => {}, :user => {:email => 'abc@abcd'} }

在本例中 params[:post] 是 {},
params[:user] 是 {:email =>; 'abc@abcd'},
params[:用户][:电子邮件] 是“abc@abcd”。

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

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

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

In this case params[:post] is {},
params[:user] is {:email => 'abc@abcd'},
params[:user][:email] is 'abc@abcd'.

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

In this case params[:post][:user][:email] is 'abc@abcd'

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文