我有一个包含工作流程的Rails3应用程序,它们有许多WorkAssignments。 WorkAssignments有一个字段,work_sent_date,日期工作已发送给该人。在工作流程编辑屏幕上,我显示工作发送日期字段,但工作流程没有属性work_sent_date。如果任何工作任务有日期,我会显示最新的工作,但无法编辑。如果全部为空白,则显示一个可编辑的文本框,并在WorkflowController#update中,如果填写该日期,则工作分配'work_sent_date字段将获取该日期。
我手动测试它时有效。我想我可以为它创建一个属性,但我想要光滑而没有冗余数据。
我正在尝试为此编写测试。首先,我断言WorkAssignment#work_sent_date对于所有工作分配都是空白的。然后我尝试“post:update”,我无法弄清楚如何传递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仍然是nil,所以它没有正确传递。我如何将今天的日期作为额外参数传递?
(或者也许有更好的方法来完成整个事情,我很乐意考虑。)
我知道这很复杂。我希望我解释得很好。任何建议,将不胜感激。我已经google到死了,找不到任何东西。
答案 0 :(得分:1)
发现我的问题。语法方式错误。这是它应该是什么。这很有效。
put :update, :id => @workflow.id, :workflow => @workflow.attributes, :work_sent_date => Date.today.to_s
答案 1 :(得分: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