Jestem trochę nowy w Railsach i Rspec i jako taki nie jestem pewien jak przetestować poprawność daty w moim modelu. Zrobiłem modelowe Wydarzenie, które ma czasy rozpoczęcia i zakończenia i jest kilka ważnych warunków, takich jak czas rozpoczęcia nie może być w przeszłości, a czas zakończenia musi być po czasie rozpoczęcia.Testowanie, że model szyn sprawdza poprawność daty z RSpec
Aby zapewnić te walidacji Używam ValidatesTimeliness https://github.com/adzap/validates_timeliness
Mój model jest następujący:
class Event < ActiveRecord::Base
...
validates_datetime :start_date,
:after => :now,
:after_message => "Event cannot start in the past"
validates_datetime :end_date,
:after => :start_date,
:after_message => "End time cannot be before start time"
end
W moim teście RSpec mam:
describe Event do
let(:event) { FactoryGirl.build :event }
subject { event }
context "when start_date is before the current time" do
it {should_not allow_value(1.day.ago).
for(:start_date)}
end
context "when end_date is before or on start date" do
it {should_not allow_value(event.start_date - 1.day).
for(:end_date)}
it {should_not allow_value(event.start_date).
for(:end_date)}
end
context "when the end_date is after the start_date" do
it {should allow_value(event.start_date + 1.day).
for(:end_date)}
end
end
Jednak to nie robi naprawdę przetestuj, że moja data rozpoczęcia musi być przed dokładną datą. Na przykład, gdybym przypadkowo użył :today
zamiast :now
w moim modelu, testy te również przejdą.
Czytałem w Internecie, że kiedyś był program RSpec matcher o nazwie validate_date
(http://www.railslodge.com/plugins/1160-validates-timeliness), który byłby dokładnie tym, czego szukam, ale o ile mogę powiedzieć, że został usunięty.
Moje pytanie brzmi: jak mogę poprawić moje testy, czy muszę dodać testy, które próbują najmniejszej ilości czasu (tj. Ms), aby zapewnić odpowiednio pozytywny wynik testu lub czy istnieje lepszy sposób, aby to zrobić?
Z góry dzięki!