Điều này cần có câu trả lời dễ dàng nhưng tôi đang cố gắng tìm nó (đã kiểm tra tài liệu RSpec, Kiểm tra EverydayRails với RSpec, kết quả của Google). Trong kỹ thuật mô hình của tôi, tôi muốn bao gồm thông số kỹ thuật thuộc tính cơ bản như sau:Cú pháp RSpec 'Mong đợi' và thuộc tính Idiomatic
describe Foo do
describe "basic attributes" do
before { @foo = create(:foo) }
subject { @foo }
it { should be_valid }
it { should respond_to(:color) }
it { should respond_to(:height) }
it { should respond_to(:some_other_attribute) }
it { should respond_to(:you_get_the_idea) }
...
Tôi thích những thông số kỹ thuật, vì nếu có một số loại lỗi trong máy của tôi và/hoặc mô hình hóa các thông số kỹ thuật giúp tôi xác định nó một cách nhanh chóng.
Tôi đã kết hợp cú pháp expect
vào tất cả các thông số kỹ thuật khác và tôi thích cách đọc, nhưng cách sử dụng nó ở đây? Một lựa chọn có thể là
expect(@foo).to respond_to(:color)
Và khác có thể
expect(it).to respond_to(:color)
Cựu liên quan đến sự trùng lặp đó là tránh được với cú pháp should
, nhưng sau này trông xa lạ với tôi (mà chỉ có thể là tôi).
Tôi nhận ra câu hỏi này mang tính phong cách hơn chức năng *, nhưng các nhà phát triển Ruby rất tận tâm về phong cách và tôi muốn tuân theo các thực hành tiêu chuẩn và có thể đọc được, mã thành ngữ. Bất kỳ trợ giúp được đánh giá cao. Cảm ơn.
CẬP NHẬT: Không có tùy chọn nào được đề xuất của tôi thực sự hoạt động, nhân tiện. Cả hai đều ném các lỗi undefined method 'expect'
. Bây giờ tôi thực sự bối rối!
Có suy nghĩ về lỗi, tôi nhận ra rằng vì thông số kỹ thuật should
ở trên nằm trong khối một dòng. Sự nhầm lẫn, sau đó, là làm thế nào tôi có thể viết một khối dòng với cú pháp mong đợi? Trong bản cập nhật này, câu hỏi là rất nhiều về chức năng và tôi sẽ vui mừng khi nghe suy nghĩ của người khác.
4/2015 CẬP NHẬT
rspec > 3.0
đã bổ sung thêm một cách xử lý này, và có vẻ như rspec ~> 4.0
sẽ loại bỏ các cú pháp should
. Per Myron Masters:
Một số người dùng đã bày tỏ sự nhầm lẫn về cách thức này nên liên quan đến cú pháp mong đợi và nếu bạn có thể tiếp tục sử dụng nó. Nó sẽ tiếp tục có mặt tại RSpec 3 (một lần nữa, bất kể cấu hình cú pháp của bạn), nhưng chúng tôi cũng đã thêm một API thay thế đó là một chút phù hợp hơn với mong đợi cú pháp:
describe Post do
it { is_expected.to allow_mass_assignment_of(:title) }
end
is_expected được định nghĩa rất đơn giản như mong đợi (chủ đề) và cũng hỗ trợ các kỳ vọng tiêu cực thông qua đối sánh is_expected.not_to. [...]
Trong RSpec 3, chúng tôi đã giữ nguyên cú pháp và có sẵn theo mặc định, nhưng bạn sẽ nhận được cảnh báo không dùng nữa nếu bạn sử dụng nó mà không bật nó một cách rõ ràng. Điều này sẽ mở đường cho nó bị vô hiệu hóa theo mặc định (hoặc có khả năng được tách thành một viên ngọc riêng biệt) trong RSpec 4, trong khi giảm thiểu sự nhầm lẫn cho người mới đến RSpec thông qua một hướng dẫn cũ.
Bạn có thể chia sẻ một trong các thông số kỹ thuật của mình được kết hợp với cú pháp 'mong đợi 'không? – Sun
Chúng khá cơ bản và có trong tài liệu RSpec cũng như trong các nguồn khác. Đây là một bài đăng blog tuyệt vời về cú pháp: http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax. Ví dụ của tôi về cơ bản trông như thế này, nhưng chúng ở dạng khối (nghĩa là "nó" làm một cái gì đó "do') ... – aceofbassgreg