0

在我的 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

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

谢谢。

4

1 回答 1

1

post不是规范的一部分,它是在响应之前发生的状态变化,因此它应该放在一个before块中。

参数不需要是实例变量(在 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
于 2012-12-26T10:41:17.427 回答