Domanda

Quando ho saputo di proxy_options ho iniziato a usarlo per testare tutti i miei ambiti nominati. Ma poi mi sono ritrovato a copiare l'hash delle condizioni direttamente dal modello, quindi non stava davvero testando la correttezza dei risultati:

  po = {:conditions => "foo.created_at <= '#{Time.now.beginning_of_week}'"}
  assert_equal po, Foo.created_this_week

Un altro approccio è quello di trovare esempi positivi e negativi e vedere se sono inclusi nei risultati o meno:

  this_week = Foo.make(:created_at => Time.now)
  last_week = Foo.make(:created_at => 1.week.ago)
  assert Foo.created_this_week.include?(this_week)
  assert !Foo.created_this_week.include?(last_week)

Ma questo non fa un buon lavoro nel controllare i confini e quando le cose si complicano avrai un lungo elenco di affermazioni incluse. Sembra che sarebbe più bello trovare un insieme atteso di risultati e quindi controllare per assicurarsi che corrisponda:

  Foo.make(:created_at => 1.week.ago)
  results = [Foo.make(:created_at => Time.now)]
  assert_equal results, Foo.created_this_week

Ma il test potrebbe non riuscire se i risultati vengono restituiti in un ordine diverso da quello fornito. Suppongo che potresti implementare & Lt; = & Gt; nel modello in modo da poter ordinare entrambi gli array. Ma sembra che non dovrebbe essere davvero necessario. Esiste un modo migliore per testare questo tipo di metodi di ricerca? O almeno un modo giusto generalmente accettato?

È stato utile?

Soluzione

Penso di essere giunto alla conclusione che non esiste " generalmente accettato nel modo giusto " per fare questo.

Immagino che la mia soluzione personale sarà quella di smettere di testare semplici named_scopes e usare l'assert include? metodo per testare funzionalità di ricerca più complicate.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top