2011-09-28 78 views
2

我有一個具有工作流的Rails3應用程序,並且他們有很多WorkAssignments。 WorkAssignments有一個字段work_sent_date,日期工作已發送給該人員。在工作流編輯屏幕上,我顯示工作發送日期字段,但工作流沒有屬性work_sent_date。如果任何工作分配有日期,我將顯示最近的日期,並且無法編輯。如果全部爲空,則顯示一個可編輯的文本框,並在WorkflowController#update中,如果該日期已填充,則工作分配的work_sent_date字段將獲取該日期。RAILS3:設置查詢參數在功能測試中發佈?

它在我手動測試時有效。我想我可以爲它創建一個屬性,但我試圖變得光滑並且沒有冗餘數據。

我想爲此寫一個測試。首先,我斷言所有工作分配的WorkAssignment#work_sent_date都是空白的。然後我嘗試「發佈:更新」,我無法弄清楚如何傳遞work_sent_date值,這是一個表單字段,但不是屬性。我想要做的是類似的事情。

test "setting work_sent_date in wf sets it in wa" do 

    @workflow.work_assignments.each do |wa| 
    assert wa.work_sent_date.blank? 
    end 

    get :edit, :id => @workflow.id 
    assert_response :success 

    post :update, :workflow => @workflow.attributes, :parameters => {'work_sent_date' => Date.today.to_s} 

    @workflow.work_assignments.each do |wa| 
    assert_equal(wa.work_sent_date, Date.today) 
    end 

end 

但是,該參數字段不起作用。沒有錯誤,但我一直在失敗,因爲wa.work_sent_date仍然是零,所以它沒有正確傳遞。我如何通過今天的日期作爲額外的參數?

(或者,也許有更好的方式做這件事,我會很樂意考慮。)

我知道這是複雜的。我希望我解釋得很好。任何建議,將不勝感激。我GOOGLE搜索到死亡,找不到任何東西。

+0

我可能會建議你看看RSpec的與水豚?這些截屏視頻中的更多信息:http://railscasts.com/episodes/257-request-specs-and-capybara?autoplay=true和http://railscasts.com/episodes/275-how-i-test?autoplay=真正的 – Aurril

回答

1

發現我的問題。語法方式錯誤。這是它應該是。這工作。

put :update, :id => @workflow.id, :workflow => @workflow.attributes, :work_sent_date => Date.today.to_s 
+0

謝謝,這正是我只是在尋找。 – Catharz

+0

太棒了,很高興它有幫助,因爲我在這個網站上收到了很多很好的幫助和信息。 –

0

您也可以重構出創建和編輯如下:

protected 
    def edit_workflow(workflow, options = {}) 
    post :update, :id => workflow.id, :workflow => workflow.attributes.merge(options) 
    end 

    def create_workflow(options = {}) 
    post :create, :workflow => {}.merge(options) 
    end 
end