Gần đây tôi tình cờ gặp vấn đề này khi di chuyển một số request
kiểm tra sang định dạng thử nghiệm feature
cho Capybara 2.1, và chuyển đổi cú pháp thử nghiệm có từ should
dựa trên để expect
dựa trên. Để sử dụng các câu hỏi ban đầu như ví dụ này, tôi đã mã như:
subject { -> { post("/api/users", parameters) } }
it { should change(User,:count).by(1) }
it { should_not change(ActionMailer::Base, :deliveries) }
Đưa này qua expect
cú pháp trong một thử nghiệm scenario
trình bày một số vấn đề và mang lại loại clunkiness (làm việc) (xin lỗi, không phải là một fan hâm mộ lớn lồng nhau một cách rõ ràng lambda
s/expect
s):
expect(-> { expect(post("/api/users", parameters)).to change(User,:count).by(1) }
).to_not change(ActionMailer::Base, :deliveries)
có một số giải pháp tuyệt vời cho vấn đề này trong this StackOverflow thread mà tôi đã cố gắng và thành công với, nhưng những gì tôi đã kết thúc làm được chỉ cần làm theo các định dạng ban đầu hơi và tách ra mỗi tuyên bố vào riêng của mình scenario
; một cái gì đó như:
feature "Add users via API" do
given(:posting_parameters_to_api) { -> { post("/api/users", parameters) } }
scenario "foo" do
expect(posting_parameters_to_api).to change(User,:count).by(1)
end
scenario "bar" do
expect(posting_parameters_to_api).to_not change(ActionMailer::Base,
:deliveries)
end
end
Chi tiết hơn so với thông số gốc request
, nhưng về cơ bản hoạt động theo cùng một cách. Việc triển khai có thể sẽ giảm xuống theo sở thích cá nhân.
Nguồn
2013-05-13 12:03:10
đang tìm kiếm chính mình này – prusswan