2013-09-08 34 views
25

Định dạng đúng cho việc sử dụng shoulda-matchers và số mới expect syntax của RSpec là gì?đối sánh phù hợp RSpec mong đợi cú pháp

+0

Xin lỗi ý tôi là cần phải có – trev9065

+0

Về việc bỏ phiếu để đóng dựa trên ý kiến ​​này chủ yếu dựa trên ý kiến, tôi muốn ld lập luận rằng trường hợp cụ thể này của yêu cầu nếu một cái gì đó là một "ý tưởng tốt" là một ngoại lệ vì có một lời giải thích dựa trên thực tế rằng mối quan tâm là một vấn đề không. –

+0

chỉnh sửa chi tiết quesrion để làm cho nó phù hợp cho SO. –

Trả lời

55

Trong khi người ta chắc chắn có thể sử dụng shoulda-quẹt với cú pháp mong đợi mới như sau:

it 'should validate presence of :email' do 
    expect(subject).to validate_presence_of :email 
end 

hoặc ngắn gọn hơn nhưng ít có thể đọc:

it { expect(subject).to validate_presence_of :email } 

one-liner should định dạng

những matchers thường được sử dụng với được hỗ trợ rõ ràng trong 2,14 ngay cả khi config.syntax == :expect. Khi should đang được sử dụng với một chủ đề tiềm ẩn như trong:

describe User 
    it { should validate_presence_of :email } 
end 

nó không dựa trên vá khỉ của Kernel rằng should khác phụ thuộc vào.

Điều này được bao gồm trong https://github.com/rspec/rspec-expectations/blob/master/Should.md. Trên thực tế, tài liệu đó thậm chí còn sử dụng ví dụ về đối sánh shoulda ở trên để minh họa ngoại lệ này.

Xem thêm Using implicit `subject` with `expect` in RSpec-2.11, thảo luận về tùy chọn cấu hình cho phép bạn sử dụng thay thế cho it.

expect_it { to validate_presence_of :email } 

Cập nhật: Tính đến RSpec 3.0 (beta2), bạn cũng sẽ có thể sử dụng:

it { is_expected.to validate_presence_of :email } 
+0

Khối đầu tiên cũng sẽ được bao quanh bởi 'Người dùng desribe', phải không? Vì nó trông giống như một omparison của 3 dòng đến 3 dòng khác nhau, nhưng không phải là khá. Nếu vậy có thể muốn thêm điều đó để làm rõ trong khối mã đầu tiên. –

+0

@MichaelDurrant Vâng, nó sẽ. Đã đồng ý. Cảm ơn bạn đã chỉ ra điều này. Đã cập nhật câu trả lời. –

+0

Bất cứ ai có bất kỳ ý tưởng những gì downvote là cho? Nó có liên quan đến các phiếu bầu cho việc này là "chủ yếu dựa trên ý kiến" không? –

0

tôi sẽ suplement câu trả lời của @ peter-alfvin. Trong trường hợp bạn kiểm tra các mô hình và di cư của mình với shoulda-matchers bạn không thể sử dụng :expect ngoài it khối, vì vậy không thể viết:

RSpec.describe ModelName, type: :model do 
    expect(subject).to belong_to(:user) 
end 

Và bạn sẽ nhận được Nguyện vọng:

`expect` is not available on an example group (e.g. a `describe` or `context` block). 

nhưng phiên bản chính xác là:

RSpec.describe ModelName, type: :model do 
    it { expect(subject).to belong_to(:user) } 
end