Mam model użytkownikatestowania: reject_if w ANAF
class User < ActiveRecord::Base
has_many :languages, :dependent => :destroy
accepts_nested_attributes_for :languages, :reject_if => lambda { |l| l[:name].blank? }
end
Chcę przetestować reject_if część z RSpec 2.0.0. Obecnie mam dwa proste przypadki testowe dla tego:
it "should not save language without name by accepts_nested_attributes" do
lambda {
@user.update_attributes!("languages_attributes"=>{"0"=>{}})
}.should_not change(Language, :count)
end
it "should save language with name by accepts_nested_attributes" do
lambda {
@user.update_attributes!("languages_attributes"=>{"0"=>{"name"=>"lang_name"}})
}.should change(Language, :count).by(1)
end
Jednak jestem całkiem nowy w testowaniu i wygląda naprawdę dziwnie imho. Zastanawiam się, czy jest to właściwy sposób na test reject_if? Czy istnieje lepszy sposób na zrobienie tego?
Twoje podejście jest jasne i przejąłem go. Twój przykład nie zależy od widoku i formy i brzmi dobrze => więcej izolacji. Jednak nie jestem pewien, czy jest to właściwy sposób, ponieważ moim zamiarem jest sprawdzenie, czy rekord języka nie jest zapisywany, gdy użytkownik przesyła formularz z pustym polem nazwy języka. Może to jest kolejne pytanie, ale jaka jest dobra strategia do naśladowania, gdy testujesz jednostkę - izolujesz się od wszystkiego tak bardzo, jak to możliwe, lub próbujesz symulować rzeczywisty przepływ pracy aplikacji? jeśli odpowiedź jest drugą opcją, czy mój przykład jest prawidłowy i prawidłowy? –
@Tadas: W pierwotnym pytaniu nie było nic na temat widoku ani formularza, więc odpowiedziałem najlepiej jak potrafię pod tym względem. Jeśli chcesz przetestować ten widok/formularz, polecam pójść z czymś takim jak ogórek lub stek do testów integracji na pełnym stosie. –