Tôi đã bắt đầu hành trình với TDD trong Rails và đã gặp phải một vấn đề nhỏ liên quan đến các kiểm tra xác thực mô hình mà dường như tôi không tìm được giải pháp. Hãy nói rằng tôi có một mô hình dùng,Rails 3.1, RSpec: xác nhận mẫu thử nghiệm
class User < ActiveRecord::Base
validates :username, :presence => true
end
và một thử nghiệm đơn giản
it "should require a username" do
User.new(:username => "").should_not be_valid
end
này kiểm tra một cách chính xác xác nhận sự hiện diện, nhưng những gì nếu tôi muốn cụ thể hơn? Ví dụ: thử nghiệm full_messages về đối tượng lỗi ..
it "should require a username" do
user = User.create(:username => "")
user.errors[:username].should ~= /can't be blank/
end
Mối quan tâm của tôi về lần thử đầu tiên (sử dụng should_not be_valid) là RSpec sẽ không tạo ra thông báo lỗi mô tả. Nó chỉ đơn giản nói "dự kiến hợp lệ? Để trả về false, đã thành sự thật." Tuy nhiên, ví dụ thử nghiệm thứ hai có một nhược điểm nhỏ: nó sử dụng phương thức create thay vì phương thức mới để nhận được đối tượng lỗi.
Tôi muốn thử nghiệm của mình cụ thể hơn về những gì họ đang thử nghiệm, nhưng đồng thời không phải chạm vào cơ sở dữ liệu.
Bất kỳ ai cũng có bất kỳ đầu vào nào?
Cảm ơn rất nhiều Matthew. Có cách nào để tiến gần hơn đến lỗi mà tôi đang thử nghiệm không? X.should_not be_valid có vẻ rất chung chung với tôi, và ai biết được liệu có cái gì khác xuống đường sẽ làm cho bản ghi không hợp lệ. Thử nghiệm này sau đó sẽ thất bại ở vị trí sai. Nhân tiện, tôi nghĩ tôi đã đánh dấu câu trả lời của bạn là được chấp nhận. Phải không? – Feech
Phải, vì vậy đây là lý do tại sao tôi tranh luận cho các nhà máy. Bạn viết mã để tạo một người dùng hợp lệ một lần ở một nơi và sau đó bạn viết một bài kiểm tra để đảm bảo nó hợp lệ trước tất cả các bài kiểm tra cá nhân để đảm bảo bạn có thể vô hiệu hóa nó. Bằng cách đó, nếu vì một lý do nào đó bạn thay đổi mô hình của mình để nhà máy sản xuất dài hơn một người dùng hợp lệ, 'Factory.build (: user) .nould be_valid' sẽ thất bại và bạn sẽ biết bạn phải cập nhật nhà máy của bạn ... ? (và có bạn chấp nhận câu trả lời của tôi) – Matthew
Giải thích hoàn hảo. Cảm ơn một lần nữa. – Feech