Hvordan spotte params ved testing av en Rails modellens setter?

stemmer
1

Gitt koden fra Complex Form del III hvordan ville du gå om å teste den virtuelle attributt?

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

Jeg er for tiden prøver å teste det ut:

  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

Men jeg får følgende feilmelding:

NoMethodError: udefinerte metoden `stringify_keys '! for new_tasks_attributes: String

Eventuelle forslag om forbedring av denne testen vil bli verdsatt.

Publisert på 18/09/2008 klokken 12:45
kilden bruker
På andre språk...                            


2 svar

stemmer
3

Det ser ut som om new_task_attributes = forventer en rekke hashes, men du passerer det en hash. Prøv dette:

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
Svarte 18/09/2008 kl. 13:04
kilden bruker

stemmer
0

Kan vi se hele stabel spor? Hvor kommer tror det streng # stringify_keys! blir kalt?

Dessuten ser params rart for meg. Er tasks.build () forventer innspill som dette: ["new_tasks_attribute", {"name" => "paint fence"}]?

Hvis ikke, kanskje du faktisk ønsker Hash # each_key () i stedet for Hash # hver ()?

Trenger mer data. Også, kan du vurdere en Ruby tag å følge din Rails tag.

Svarte 18/09/2008 kl. 13:11
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more