使用params.merge将对象的参数传递给Rspec测试

时间:2012-12-26 10:23:29

标签: ruby-on-rails testing rspec factory-bot

在我的rspec测试中,我使用factorygirl创建了一个对象,在我的创建控制器中,我需要参数才能创建一个对象。由于有许多参数和与回形针的连接,我不想手工给它们。 我的代码如下:

  it "should render correct JSON on success save" do
    @params = {}
    post(:create, @params.merge(:upload => FactoryGirl.create(:upload)))
    response.body.should == @upload.to_json
  end

所以我的问题是初始化:upload的参数。我已经在@upload

的开头用factorygirl创建了before个对象

我该如何有效地解决这个问题?

感谢。

1 个答案:

答案 0 :(得分:1)

post不是规范的一部分,它是在响应之前发生的状态更改,因此它应该位于before块中。

params不需要是实例变量(在RSpec中做什么?),最好使用let

context "When saving" do

 before do
   post(:create, params)
 end

 subject { response.body }

 context "That is successful" do
   let(:upload) { FactoryGirl.attributes_for(:upload) }
   let(:params){
     {:upload => upload }
   }
   it { should == upload.to_json }
 end

 context "That is not successful" do
   # do some failure stuff here
 end
end