ファイルからコマンドラインの設定オプションを読み込む
RSpecは、特定の詳細レベルに準拠する複数のファイルからコマンドラインの設定オプションを読み込みます。より詳細なレベルのオプションは、より低い詳細レベルのファイルの競合するオプションを上書きします。
場所は以下の通りです:
-
グローバルオプション: 以下のリストの最初のファイル(つまり、ユーザーの個人的なグローバルオプション)
$XDG_CONFIG_HOME/rspec/options
(XDG Base Directory Specification config)~/.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
を実行します。
その結果、すべての例がパスするはずです。