Как вы высмеиваете параметры при тестировании установщика модели Rails? - PullRequest
1 голос
/ 18 сентября 2008

Учитывая код из Сложной формы, часть III , как бы вы протестировали виртуальный атрибут?

  def new_task_attributes=(task_attributes)
    task_attributes.each do |attributes|
      tasks.build(attributes)
    end
  end

Я сейчас пытаюсь проверить это так:

  def test_adding_task_to_project
    p = Project.new
    params = {"new_tasks_attributes" => [{ "name" => "paint fence"}]}
    p.new_tasks_attributes=(params)
    p.save
    assert p.tasks.length == 1
  end

Но я получаю следующую ошибку:

NoMethodError: неопределенный метод `stringify_keys! ' для "new_tasks_attributes": String

Будем весьма благодарны за любые предложения по улучшению этого теста.

Ответы [ 2 ]

3 голосов
/ 18 сентября 2008

Похоже, что new_task_attributes = ожидает массив хэшей, но вы передаете ему хэш. Попробуйте это:

def test_adding_task_to_project
  p = Project.new
  new_tasks_attributes = [{ "name" => "paint fence"}]
  p.new_tasks_attributes = (new_tasks_attributes)
  p.save
  assert p.tasks.length == 1
end
0 голосов
/ 18 сентября 2008

Можем ли мы увидеть весь след стека? Где он думает String # stringify_keys! называется?

Кроме того, params выглядит странно для меня. Задачи.build () ожидают ввода следующим образом: ["new_tasks_attribute", {"name" => "paint fence"}]?

Если нет, может, вам на самом деле нужен Hash # each_key () вместо Hash # each ()?

Нужно больше данных. Кроме того, вы можете использовать тег Ruby для сопровождения вашего тега Rails.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...