문제

의 코드가 주어지면 복잡한 형태 파트 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

하지만 다음과 같은 오류가 발생합니다.

NoMethod오류:정의되지 않은 방법`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() 대신 Hash#each_key()를 원할까요?

더 많은 데이터가 필요합니다.또한 Rails 태그와 함께 Ruby 태그를 고려할 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top