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:
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?