2010-12-13 10 views
6

Ich habe ein BenutzermodellPrüfung: reject_if in ANAF

class User < ActiveRecord::Base 
    has_many :languages, :dependent => :destroy 
    accepts_nested_attributes_for :languages, :reject_if => lambda { |l| l[:name].blank? } 
end 

I reject_if Teil mit RSpec 2.0.0 testen möchten. Zur Zeit habe ich zwei einfache Testfälle dafür

Allerdings bin ich ziemlich neu zu testen und es sieht wirklich komisch imho. Ich frage mich, ob dies ein richtiger Weg ist, reject_if zu testen? Und gibt es einen schöneren Weg, das zu tun?

Antwort

10

Ich sehe, dass du nun die reject_if dann die beste Art und Weise zu testen, dies zu tun, ist es direkt zu testen:

anaf_for_languages = User.nested_attributes_options[:languages] 
anaf_for_languages[:reject_if].call({ "name" => "" }).should be_true 

Wenn es true ist, dann name leer ist. Ich denke, das ist ein wenig prägnanter als Ihr Code, aber nicht so offensichtlich.

+0

Ihre Vorgehensweise ist klar und ich habe sie upvolotiert. Dein Beispiel hängt nicht von der Ansicht und Form ab und es klingt gut => mehr Isolation. Ich bin mir jedoch nicht sicher, ob dies der richtige Weg ist, da ich prüfen möchte, ob der Sprachdatensatz nicht gespeichert wird, wenn ein Benutzer ein Formular mit einem leeren Feld für den Sprachnamen einreicht. Vielleicht ist dies eine andere Frage, aber was ist eine gute Strategie, die beim Komponententest zu befolgen ist - so weit wie möglich von allem isolieren oder einen echten Anwendungsworkflow simulieren? Wenn die Antwort die letzte Option ist, ist mein Beispiel gültig und korrekt? –

+0

@Tadas: Es gab nichts über eine Ansicht oder eine Form in der ursprünglichen Frage, so dass ich in dieser Hinsicht mein Bestes gegeben habe. Wenn Sie versuchen, die Ansicht/Form auf diesem zu testen, dann würde ich empfehlen, mit etwas wie Gurke oder Steak für Full-Stack-Integration Tests gehen. –