既存のテスト スイートをライブで使用できるようにするために、2 つのことをdescribe
行いit
ました。2 つ目は、の機能を使用しshared_contexts
てブロックを取得します。
まず、実際の API に対して実行する仕様をメタデータでマークします。たとえば、これらが実際に実行できることを知りたいとします。
describe "Hitting the API with a call", :can_be_real do
# …
end
これらの仕様は、tag オプションを使用してコマンドラインから実行できます。
2 つ目は、モックを本物に置き換えることです。それは、モックをどのように定義したか、 abefore
または aのどちらlet
が使用されたか、およびどれだけモックしたかによって異なります。ばかげた例として、以下を参照してください。
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
bin/rspec example.rb
出力を介してファイルを実行すると、次のようになります。
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
経由で実行する場合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
ご覧のとおり、仕様のコンテキストをいくつかの方法で変更して、コマンド ライン (つまり Jenkins) から必要なレベルの制御を可能にすることができます。実際に実行しても安全かどうか、時間がかかるかどうかなど、他のメタデータで仕様をマークしたいと思うでしょう。