2012-12-26 39 views
0

在我的RSpec的測試中,我創建factorygirl的對象,在我創造控制器,我需要爲創建對象的參數。由於有許多參數和與回形針的連接,我不想親自給他們。 我的代碼如下:經過物體的PARAMS到Rspec的測試與params.merge

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 

所以我的問題是初始化:上傳的PARAMS。我已經創建了@upload對象與開始的工廠女生before

我應該如何有效地解決這個問題?

謝謝。

回答

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 
+0

它給 '故障/錯誤:交(:創建,則params) NoMethodError: 未定義的方法'stringify_keys' 爲 「2」:字符串」錯誤。但我不明白哪裏來自:/? – CanCeylan

+0

2是我調用FactoryGirl.create(:upload)的次數。但爲什麼會導致錯誤? – CanCeylan

+0

如果您使用的是水豚|您沒有提及rails-rspec |機架測試等。我不知道爲什麼沒有更多的信息拋出錯誤。我做了一個小小的修改。就我個人而言,我不會創建'@ upload'變量/模型,因爲它不是必需的。 'let(:upload){FactoryGirl.attributes_for(:upload)}'完成創建並記憶對象/散列,這意味着它可以在更多示例中重用,並且不會通過更改來搞亂示例。 – iain