2012-08-03 18 views
6

Łamałem sobie głowę na tej łatwej walidacji i nie mogę go zatwierdzić. Mam następujący model:Zatwierdzenie akceptacji Rspec i FactoryGirl

class Attendance < ActiveRecord::Base 
    belongs_to :user, counter_cache: true 
    belongs_to :event, counter_cache: true 

    validates :terms_of_service, :acceptance => true 
end 

To jest mój fabryczne:

factory :attendance do 
    user 
    event 
    terms_of_service true 
    end 

To moja próba:

describe "event has many attendances" do 
    it "should have attendances" do 
     event = FactoryGirl.create(:event) 
     user1 = FactoryGirl.create(:user, firstname: "user1", email: "[email protected]") 
     user2 = FactoryGirl.create(:user, firstname: "user2", email: "[email protected]") 

     attendance1 = FactoryGirl.create(:attendance, event: event, user: user1, terms_of_service: true)  
    end 
    end 

ta nie powinna wywołać żadnych błędów, ale to robi .

Running spec/models/workshop_spec.rb 
.............F 

Failures: 

    1) Event event has many attendances should have attendances 
    Failure/Error: attendance1 = FactoryGirl.create(:attendance, event: event, user: user1, terms_of_service: true) 
    ActiveRecord::RecordInvalid: 
     Validation failed: Terms of service must be accepted 
    # ./spec/models/event_spec.rb:33:in `block (3 levels) in <top (required)>' 

Kiedy wykonuję te czynności w przeglądarce i akceptuję, że wszystko idzie dobrze. Czego tu mi brakuje ?!

Odpowiedz

9

Czy :terms_of_service jest zmapowany do kolumny db? Wartością domyślną dla validates :acceptance jest ciąg "1", a nie true. Jeśli jest odwzorowywany na db kolumny, spróbuj dodać :accept => true walidacji:

validates :terms_of_service, :acceptance => {:accept => true} 

Jeśli pole nie jest odwzorowany lub kolumna DB nie jest logiczna, spróbuj użyć „1” zamiast prawda w testach i fabryk .

+0

Dzięki, to było to! Próbowałem wszystkiego oprócz sznurka. Dzięki, dla rekordu był to atrybut wirtualny! –

+0

@dimuch Czy kiedykolwiek wiedziałeś, że jesteś moim bohaterem? Dzięki. – Jeff

Powiązane problemy