Đị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
Trả lời
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
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 }
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. –
@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. –
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? –
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
Xin lỗi ý tôi là cần phải có – trev9065
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. –
chỉnh sửa chi tiết quesrion để làm cho nó phù hợp cho SO. –