2012-11-17 12 views
5

Khi tiêu đề đề xuất tôi đang cố gắng kiểm tra trình xác thực tùy chỉnh với Rspec. Tôi nhận được một lỗi và tôi không hiểu tại sao ... Nếu bạn có thể làm sáng tỏ tôi sẽ thực sự đánh giá cao nó. Ở đây chúng ta đi:Kiểm tra trình xác thực tùy chỉnh với rspec. Tại sao tôi có được Proc?

Validator đặc tả

require 'spec_helper' 

describe GraphDateValidator do 

    it "should not validate activity with empty start time" do 
    expect { Graph.new({start_time: ''}).valid? }.to eq(false) 
    end 
end 

Nếu tôi in Graph.new({start_time: ''}).valid? nó in false

Tuy nhiên khi nó đi qua spec nó trả về một đối tượng Proc:

expected: false 
      got: #<Proc:[email protected]/Users/MLP/... 

Ai có thể cho tôi biết lý do tại sao tôi nhận được rằng đối tượng proc? Cảm ơn bạn!

+1

là việc sử dụng dấu ngoặc nhọn "{}" một lỗi đánh máy? bình thường, nó mong đợi(). để eq (false) –

+0

Tôi chỉ cần thông báo rằng :) Tôi thực sự không thể nhìn thấy nó :) Cảm ơn. Nếu bạn đặt câu trả lời tôi có thể chấp nhận nó ... –

Trả lời

15

Bằng cách sử dụng {} theo mong đợi của bạn, thì bạn thực sự không thực hiện phương thức mong đợi --- thay vào đó bạn đang gửi một khối dự kiến. Vì vậy, đổi tên để

it "should not validate activity with empty start time" do 
    expect(Graph.new({start_time: ''}).valid?).to eq(false) 
end 
-2

Đối với phong cách tốt hơn và không tin nhắn, bạn có thể sử dụng quẹt vị rspec của:

it "does not accept empty start time" do 
    Graph.new({start_time: ''}).should_not be_valid 
end 

Sửa 1 (giải thích thị hiếu phong cách):

này cung cấp cho bạn các thông báo lỗi có thể đọc được như "dự kiến ​​$ foo hợp lệ, nhưng không phải" thay vì "đúng là sai".

Với "phong cách tốt hơn", tôi đã tham khảo việc sử dụng Matcher (như tôi đã viết), không phải là should. Vì vậy, sau đây sẽ không sử dụng cú pháp không được chấp thuận, nhưng vẫn sử dụng đối sánh:

it "does not accept empty start time" do 
    expect(Graph.new({start_time: ''})).to be_valid 
end 
+0

theo cách này không được chấp nhận vì vậy tôi hoài nghi đây là "phong cách tốt hơn" –

+0

ít nhất nó cung cấp cho bạn các thông báo lỗi có thể đọc được như "$ foo dự kiến ​​là hợp lệ, nhưng không phải" thay vì "true nên sai". "kiểu tốt hơn" là tham chiếu đến việc sử dụng đối sánh, chứ không phải là 'nên'. Vì vậy, các follwing sẽ không sử dụng cú pháp không được chấp nhận, nhưng vẫn sử dụng matchers: nó "không chấp nhận thời gian bắt đầu trống" làm mong đợi (Graph.new ({start_time: ''})) .to be_valid end –