Rails 모델의 setter를 테스트할 때 매개변수를 어떻게 모의합니까?
-
01-07-2019 - |
문제
의 코드가 주어지면 복잡한 형태 파트 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 태그를 고려할 수도 있습니다.
제휴하지 않습니다 StackOverflow