2012-08-03 17 views
6

Tôi đã phá vỡ đầu của tôi về xác nhận này dễ dàng và tôi không thể làm cho nó để xác nhận. Tôi đã có mô hình sau:Rspec & FactoryGirl xác nhận chấp nhận

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

    validates :terms_of_service, :acceptance => true 
end 

Đây là Nhà máy của tôi:

factory :attendance do 
    user 
    event 
    terms_of_service true 
    end 

Đây là thử nghiệm của tôi:

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 

này không nên đưa lên bất kỳ lỗi nào nhưng nó .

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)>' 

Khi tôi thực hiện các tác vụ này trong trình duyệt của mình và tôi chấp nhận tất cả đều tốt. Tôi đang thiếu gì ở đây ?!

Trả lời

9

Có phải :terms_of_service được ánh xạ tới cột db không? Giá trị mặc định cho validates :acceptance là chuỗi "1", không phải là true. Nếu nó được ánh xạ tới db cột, cố gắng thêm :accept => true để xác nhận:

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

Nếu trường không được ánh xạ, hoặc DB cột không phải là boolean, cố gắng sử dụng "1" thay vì đúng trong các thử nghiệm và nhà máy .

+0

Cảm ơn, đó là nó! Tôi đã thử tất cả mọi thứ nhưng một chuỗi. Cảm ơn, vì bản ghi đó là một thuộc tính ảo! –

+0

@dimuch Bạn có bao giờ biết rằng bạn là anh hùng của tôi? Cảm ơn. – Jeff