RAILS3:设置查询参数以在功能测试中发布?

时间:2011-09-28 19:06:39

标签: ruby-on-rails-3 automated-tests

我有一个包含工作流程的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到死了,找不到任何东西。

2 个答案:

答案 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