私はclient
オブジェクトをWebサービスで動作させる必要のあるルビーの宝石に収めています。私はそれが適切に初期化し、すべての引数が渡されていない場合は、エラーをスローできることを確認するためにテストしていRspec:通過テストを失敗させるにはどうしたらいいですか?
ここに私の仕様です:。
module Contentstack
class Client
attr_reader :access_key, :access_token, :environment
def initialize(access_key:, access_token:, environment:)
@access_key = access_key
@access_token = access_token
@environment = environment
validate_configuration!
end
def validate_configuration!
fail(ArgumentError, "You must specify an access_key") if access_key.nil?
fail(ArgumentError, "You must specify an access_token") if access_token.nil?
fail(ArgumentError, "You must specify an environment") if environment.nil?
end
end
end
:ここ
describe 'Contentstack::Client Configuration' do
describe ":access_token" do
it "is required" do
expect { create_client(access_token: nil) }.to raise_error(ArgumentError)
end
end
describe ":access_key" do
it "is required" do
expect { create_client(access_key: nil) }.to raise_error(ArgumentError)
end
end
describe ":environment" do
it "is required" do
expect { create_client(environment: nil) }.to raise_error(ArgumentError)
end
end
end
は、宝石のコードです
、ここではspec_helper方法である:
def create_client(access_token:, access_key:, environment:)
Contentstack::Client.new(access_token: access_token, access_key: access_key, environment: environment)
end
問題がある:私はTHESを作るための方法を見つけることができませんテストが合格する前に失敗します。ルビはデフォルトでArgumentError
を投げるので、これらのテストは常に失敗します。これがTDDの正しいアプローチであるかどうかは分かりません。このシナリオでは、どのようにして赤と緑のリファクタリングサイクルに入るのですか?
ああ、確かに、今私の答えをアップアップした2人の人は誰だろうと思う。ところで、これは回避すべき_実装例test_の完璧な例です。 – mudasobwa
ねえ、これは動作します。しかし、私は間違いを理解していません。私のヘルパーのバグですか? –
@AmitErandole空のヘルパーで私の最初の例を見てください。すべての必須のキーワード引数を渡していないので、 'ArgumentError'が発生します。 – Stefan