Как вы имитируете параметры при тестировании установщика модели Rails?

StackOverflow https://stackoverflow.com/questions/93214

Вопрос

Учитывая код из Сложная форма, часть 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

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

НоМетодОшибка:Неопределенный метод `stringify_keys! для "new_tasks_attributes": строка

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

Это было полезно?

Решение

Похоже, что 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

Другие советы

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

Кроме того, параметры кажутся мне странными.Ожидает ли Tasks.build() ввод таких данных: ["new_tasks_attribute", {"name" => "paint fence"}] ?

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top