RAILS3: установить параметры запроса для публикации в функциональных тестах? - PullRequest
2 голосов
/ 28 сентября 2011

У меня есть приложение Rails3 с рабочими процессами, и у них много рабочих заданий.В 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 все еще ноль, поэтому он не передается правильно.Как передать сегодняшнюю дату в качестве дополнительного параметра?

(Или, может быть, есть лучший способ сделать все это, что я с удовольствием рассмотрю.)

Я знаю, что это сложно.Я надеюсь, что я объяснил это хорошо.Мы ценим любые предложения.Я погуглил до смерти и ничего не могу найти.

Ответы [ 2 ]

1 голос
/ 04 октября 2011

Нашел мою проблему. Синтаксис неверный. Вот что должно быть. Это работает.

put :update, :id => @workflow.id, :workflow => @workflow.attributes, :work_sent_date => Date.today.to_s
0 голосов
/ 01 февраля 2012

Вы также можете выполнить рефакторинг для создания и редактирования следующим образом:

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
...