Có 2 điều tôi muốn làm với bộ thử nghiệm hiện tại để nó có thể được sử dụng trực tiếp, đầu tiên sử dụng khả năng dành cho các khối describe
và it
để siêu dữ liệu (There's a good blog post on it here). Thứ hai sử dụng khả năng cho shared_contexts
để có một khối.
Thứ nhất, đánh dấu các thông số kỹ thuật bạn muốn chạy với API thực bằng siêu dữ liệu. Ví dụ: bạn muốn biết những điều này có thể chạy thực, ví dụ:
describe "Hitting the API with a call", :can_be_real do
# …
end
Các thông số này sau đó có thể được chạy từ dòng lệnh using the tag option.
Điều thứ hai, là thay thế mocks bằng thực tế. Nó phụ thuộc vào cách bạn đã xác định các mocks, cho dù một before
hoặc một let
đã được sử dụng, và bao nhiêu bạn chế giễu. Như một ví dụ ngớ ngẩn, xem dưới đây:
require 'rspec'
RSpec.configure do |c|
c.treat_symbols_as_metadata_keys_with_true_values = true
end
shared_context "all my mocks and stubs" do
let(:this) { false }
end
describe "a", :real do
include_context "all my mocks and stubs" do
let(:this) { true } if ENV["REAL_API_CALL"] == 'true'
before do
stub_const("URI", Class.new) unless ENV["REAL_API_CALL"] == 'true'
end
end
it "should be real when it's real" do
this.should == true
end
it "should escape things when it's real" do
URI.should respond_to :escape
end
end
Khi tập tin được chạy qua bin/rspec example.rb
đầu ra là:
a
should be real when it's real (FAILED - 1)
should escape things when it's real (FAILED - 2)
Failures:
1) a should be real when it's real
Failure/Error: this.should == true
expected: true
got: false (using ==)
# ./example.rb:19:in `block (2 levels) in <top (required)>'
2) a should escape things when it's real
Failure/Error: URI.should respond_to :escape
expected URI to respond to :escape
# ./example.rb:22:in `block (2 levels) in <top (required)>'
Finished in 0.00349 seconds
2 examples, 2 failures
Khi chạy qua env REAL_API_CALL=true bin/rspec example.rb
:
a
should be real when it's real
should escape things when it's real
Finished in 0.00301 seconds
2 examples, 0 failures
Vì vậy, bạn thấy, bạn có thể thay đổi bối cảnh của các số kỹ thuật theo một số cách cho phép bạn kiểm soát mức độ bạn muốn từ dòng lệnh (và do đó, Jenkins). Bạn sẽ muốn đánh dấu các thông số với siêu dữ liệu khác, chẳng hạn như liệu có an toàn để chạy thực hay không, có thể mất một thời gian dài hay không…
Tôi đồng ý, VCR rất tuyệt cho việc này. Về cơ bản ghi lại một "hợp đồng" của các loại. Sau đó bạn có thể ghi lại và kiểm tra sự khác biệt. – irfn