メインコンテンツまでスキップ

ファイルからコマンドラインの設定オプションを読み込む

RSpecは、特定の詳細レベルに準拠する複数のファイルからコマンドラインの設定オプションを読み込みます。より詳細なレベルのオプションは、より低い詳細レベルのファイルの競合するオプションを上書きします。

場所は以下の通りです:

  • グローバルオプション: 以下のリストの最初のファイル(つまり、ユーザーの個人的なグローバルオプション)

  • プロジェクトオプション: ./.rspec(つまり、プロジェクトのルートディレクトリにある通常はプロジェクトにチェックインされる)

  • ローカル: ./.rspec-local(つまり、プロジェクトのルートディレクトリにあるが、gitignoreされることがある)

コマンドラインで指定されたオプションは、さらに高い詳細レベルを持ちます。同様に、SPEC_OPTS環境変数も高い詳細レベルを持ちます。つまり、コマンドラインオプションはプロジェクト固有のオプションを上書きし、そのオプションはグローバルな値を上書きします。

デフォルトのオプションファイルは、--optionsコマンドライン引数を使用して無視することができます。この引数は、オプションを読み込むためのカスタムファイルを選択します。

.rspecで設定されたカラー

Given ".rspec"という名前のファイルが以下の内容である場合:

--force-color

And "spec/example_spec.rb"という名前のファイルが以下の内容である場合:

RSpec.describe "color_enabled?" do
context "when set with RSpec.configure" do
it "is true" do
expect(RSpec.configuration).to be_color_enabled
end
end
end

When rspec ./spec/example_spec.rbを実行すると

Then すべての例がパスするはずです。

カスタムオプションファイル

Given "my.options"という名前のファイルが以下の内容である場合:

--format documentation

And "spec/example_spec.rb"という名前のファイルが以下の内容である場合:

RSpec.describe "formatter set in custom options file" do
it "sets formatter" do
expect(RSpec.configuration.formatters.first).
to be_a(RSpec::Core::Formatters::DocumentationFormatter)
end
end

When rspec spec/example_spec.rb --options my.optionsを実行すると

Then すべての例がパスするはずです。

カスタムオプションファイルが使用される場合、RSpecは./.rspecを無視します

Given "my.options"という名前のファイルが以下の内容である場合:

--format documentation

And ".rspec"という名前のファイルが以下の内容である場合:

--no-color

And "spec/example_spec.rb"という名前のファイルが以下の内容である場合:

RSpec.describe "custom options file" do
it "causes .rspec to be ignored" do
expect(RSpec.configuration.color_mode).to eq(:automatic)
end
end

When rspec spec/example_spec.rb --options my.optionsを実行すると

その後、すべての例がパスするはずです。

.rspec で ERB を使用する

次のような ".rspec" という名前のファイルがあるとします:

--format <%= true ? 'documentation' : 'progress' %>

および "spec/example_spec.rb" という名前のファイルがあるとします:

RSpec.describe "formatter" do
it "is set to documentation" do
expect(RSpec.configuration.formatters.first).
to be_an(RSpec::Core::Formatters::DocumentationFormatter)
end
end

するとrspec ./spec/example_spec.rb を実行します。

その結果、すべての例がパスするはずです。