2012-03-12 23 views
6

Tôi có một lớp người sử dụng với một email mà là duy nhất nhưng scoped để người thuê nhà:nghiệm độc đáo trong một phạm vi trong một dự án Rails sử dụng shoulda (nhưng không rspec)

class User < ActiveRecord::Base 
    validates :email, :uniqueness => {:scope => :tenant_id, :allow_blank => true} 
    #... 
end 

Tôi đang cố gắng để kiểm tra nó với:

class UserTest < ActiveSupport::TestCase 
    context "a user" do 
    setup { @user = create :user } 
    subject { @user } 

    should validate_uniqueness_of(:email).scoped_to(:tenant_id) 
    end 
end 

nhưng các thử nghiệm không thành công với tin nhắn này:

lỗi Dự kiến ​​sẽ bao gồm "đã được thực hiện" khi email được thiết lập để "[email protected] xample.com ", có lỗi: [" email đã được thực hiện (\ "[email protected] \") "," first_name không được để trống (nil) "," last_name không được để trống (nil) "] (có giá trị khác nhau của tenant_id)

làm tăng nhiều câu hỏi. Tại sao thông báo lỗi không khớp? Có vẻ như vì địa chỉ email thực sự được bao gồm trong thông báo lỗi, nhưng tại sao nó lại được đưa vào? Khi tôi tạo ra các lỗi từ UI nó dường như không được bao gồm:

enter image description here

Ngoài ra, ở cuối nó nói rằng nó đang cố gắng nó với một người thuê nhà khác nhau, mà nếu đó là sự thật, nó shouldn không tạo ra bất kỳ lỗi nào (không phải khi tôi tự chạy ứng dụng), nhưng tại sao nó lại gặp lỗi? Nó chỉ nên mong đợi lỗi nếu nó là cùng một tenant_id.

Điều này thật khó hiểu. Bất kỳ ý tưởng gì đang xảy ra và/hoặc làm thế nào để kiểm tra đúng cách này?

Trả lời

15

Chỉ cần chạy vào cùng một vấn đề này. Chúng tôi đã có thể giải quyết nó bằng cách thay đổi

should validate_uniqueness_of(:email).scoped_to(:tenant_id) 

để

should validate_uniqueness_of(:email_id).scoped_to(:tenant_id) 

Không biết nếu nó chính xác tình huống tương tự, nhưng dường như vấn đề của chúng tôi là do nguồn lực lồng ném các khớp cho một vòng lặp bằng cách nào đó .

0

Tôi thấy rằng scoped_to đã che khuất các vấn đề với một số thử nghiệm nhất định. Bất cứ khi nào gặp phải, nó trở nên cần thiết để viết các bài kiểm tra chi tiết hơn và tự kiểm tra sự thất bại để tạo ra một đối tượng trong cùng một phạm vi.

Các vấn đề liên quan