在我的rspec测试中,我用factorygirl创建了一个对象,在我的create控制器中,我需要参数来创建对象。因为回形针有很多参数和联系,所以我不想手工给他们。我的代码如下:
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的参数。我已经用factorygirl创建了@upload
对象开头是before
我该如何有效地解决这个问题?
谢谢。
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