使用对象参数和额外ID模拟POST请求

时间:2015-08-20 19:12:40

标签: ruby-on-rails ruby rspec

我在ROR应用程序中进行RSpec测试,我需要模拟一个post动作以测试一个控制器。

正常使用是这样的:

post :candidate, candidate: FactoryGirl.attributes_for(:candidate)

我的问题是我还需要传递来自网址的ID。动作网址是这个:

candidates POST    /positions/:id/candidate(.:format)      positions#candidate

所以我需要的是这样的东西:

post :candidate, candidate: FactoryGirl.attributes_for(:candidate), id: position.id

如何使用对象属性和id来模拟发布请求?

在正常使用中,rails服务器中的输出为:

Parameters: {"utf8"=>"✓", "candidate"=>{"first_name"=>"John", "last_name"=>"Doe", "email"=>"john@gmail.com", "phone_number"=>"+351911111111", "skype_id"=>"qwe", "linkedin_url"=>"qwe", "why_work_with_us"=>"qwe", "resume_url"=>"qwe", "portfolio_url"=>"qwe"}, "id"=>"2"}

1 个答案:

答案 0 :(得分:1)

您可以使用参数哈希发送所有必需的参数。因此,构建一个params哈希,然后将其传递给post调用,如下所示:

let(:params) { { candidate: FactoryGirl.attributes_for(:candidate), id: position.id } }
post :candidate, params