2013-02-22 28 views
18

Trong ứng dụng của tôi, tôi muốn có một mô hình Car.Trong RSpec - làm thế nào tôi có thể kiểm tra nếu một thuộc tính ít hơn (hoặc nhiều hơn) so với một thuộc tính khác

Nó sẽ có hai trường trong số các trường khác: date_fromdate_till (để chỉ định khoảng thời gian ai đó đang sử dụng).

Và tôi muốn mô hình xác thực ngày tháng đó phải nhỏ hơn hoặc bằng ngày tháng.

dự thảo model_spec.rb của tôi trông như thế này:

require 'spec_helper' 

describe Car do 
    it {should validate_presence_of(:model)} 
    it {should validate_presence_of(:made)} 

    it "should have date_till only if it has date_from" 
    its "date_till should be >= date_from" 
end 

Rõ ràng, tôi chỉ có thể viết một "dài" thử nghiệm nơi tôi sẽ cố gắng thiết lập date_till để được lớn hơn date_from - và mô hình chỉ nên không hợp lệ. Nhưng có lẽ có một số cách thanh lịch để làm điều đó?

Vì vậy, làm cách nào tôi có thể (sử dụng đối sánh RSpec) xác thực rằng một trường không lớn hơn trường khác?

UPD: Tôi nhìn câu trả lời @ itsnikolay và mã hóa nó như thế:

it "should not allow date_till less than date_from" do 
    subject.date_from = Date.today 
    subject.date_till = Date.today - 1.day 

    subject.valid?.should be_false 
end 

Đã phải làm điều đó mà không cần quẹt. Vâng, không phải là một bi kịch :)

Trả lời

44

Đây là một thay thế cho câu trả lời trước trong trường hợp bất cứ ai đang tìm kiếm cú pháp Expect thay cú pháp nên.

expect(@car.date_from).to be <= @car.date_till

Resources:

8

Chỉ cần sử dụng <=

date_from.should be <= date_till 
+0

mới nếu họ cả được khởi tạo là nil? kiểm tra sẽ vượt qua, nhưng nó bao gồm tất cả các hành vi? –

4
@car = Car.create \ 
    name:  'Buggy', 
    date_from: Date.today + 1.day, 
    date_till: Date.today + 2.day 

expect(@car.date_from).to be <= @car.date_till 

Thông tin chi tiết: RSpec Comparison matchers

2

Hoặc trong cú pháp

expect(date_from).to be <= date_till 
Các vấn đề liên quan