2010-11-09 31 views
6

tôi đặt đoạn mã sau vào một thử nghiệm RSpec:Shoulda validate_format_of. not_with có vấn đề trong khuôn khổ (hoặc trong sự hiểu biết của tôi)

it { should validate_format_of(:email).not_with('[email protected]')} 

và thiết lập các lớp học thực tế với:

validates :email, :presence => true, :format => /\b[A-Z0-9._%-][email protected](?:[A-Z0-9-]+\.)+[A-Z]{2,4}\b/i 

Và khi tôi chạy thử nghiệm tôi nhận được:

thất bại: 1) tài Failure/Lỗi: nó {nên validate_format_of (: Địa chỉ email) .not_with ('test @ test')} Expec lỗi ted để bao gồm "không thể để trống" khi email được đặt thành "kiểm tra @ test", có lỗi: ["tên không được để trống (nil)", "email không hợp lệ (\" test @ test \ ") "] # ./spec/models/user_spec.rb:8:in 'khối (2 cấp) trong'

Khi tôi làm một bài kiểm tra đi qua như:

it { should validate_format_of(:email).with('[email protected]')} 

Mọi thứ hoạt động như mong đợi . Ai đó có thể cho tôi biết nếu tôi đang làm điều gì đó sai hoặc nếu đây là một vấn đề khung. Cảm ơn bạn.

+0

Giả sử bạn có nghĩa là 'kiểm tra @ test' cho giá trị thử nghiệm không thành công, đúng không? – zetetic

Trả lời

3

Tôi chỉ chạy vào một vấn đề tương tự Hóa ra bạn cần phải gọi phương thức with_message và cung cấp các thông báo lỗi chính xác như là một chuỗi, hoặc một regex phù hợp với thông báo lỗi. Làm như vậy sẽ thuyết phục validate_format_of ngừng chấm dứt bướng bỉnh của nó rằng các lỗi định dạng dẫn đến thông báo "không được để trống" và thực sự vượt qua. Ví dụ:

it { should validate_format_of(:email).not_with('[email protected]')} 

trở thành

it { should validate_format_of(:email).not_with('[email protected]').with_message(/invalid/)} 

này chắc chắn trông giống như một lỗi trong thư viện shoulda.

+0

Cũng lưu ý rằng bạn cần phải gọi with_message trên "với" trường hợp là tốt, nếu không nó sẽ errantly thành công bởi vì nó đang tìm kiếm "không thể để trống" trong danh sách lỗi của lĩnh vực đang được xác nhận. – thatothermitch

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