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

ワンライナー構文

RSpecは、subjectに対する期待値を設定するためのワンライナー構文をサポートしています。RSpecは、例で使用されるマッチャーから自動生成されたドキュメント文字列を提供します。これは、ドキュメント文字列と例で使用されるマッチャーが完全に一致する場合に重複を避けるために特に設計されています。過度に使用すると、読みにくいドキュメント出力やオブジェクトの理解に貢献しない出力が生成される可能性があります。

これには2つのバリエーションがあります:

  • is_expectedは単純にexpect(subject)と定義されており、新しいexpectベースの構文を使用してrspec-expectationsを使用している場合に使用されます。
  • shouldは、rspec-expectationsがshouldベースの構文しか持っていなかった時に設計されました。ただし、:should構文が無効になっている場合でも利用可能で動作します(Object#shouldが削除されるだけであり、これはRSpec::Core::ExampleGroup#shouldです)。

注意:

  • この機能は、rspec-expectationsを使用している場合にのみ利用可能です。
  • このワンライナー構文を使用して定義された例は、--exampleオプションを使用してコマンドラインから直接選択することはできません。
  • ワンライナー構文は、非ブロックの期待値(例:expect(obj).to eqなど)とのみ動作し、ブロックの期待値(例:expect { object })とは使用できません。

暗黙のsubject

次の内容で「example_spec.rb」という名前のファイルがあるとします:

RSpec.describe Array do
describe "when first created" do
# Rather than:
# it "should be empty" do
# subject.should be_empty
# end

it { should be_empty }
# or
it { is_expected.to be_empty }
end
end

「rspec example_spec.rb --format doc」と実行すると、

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

かつ、出力には次の内容が含まれているはずです:

Array
when first created
is expected to be empty
is expected to be empty

明示的なsubject

次の内容で「example_spec.rb」という名前のファイルがあるとします:

RSpec.describe Array do
describe "with 3 items" do
subject { [1,2,3] }
it { should_not be_empty }
# or
it { is_expected.not_to be_empty }
end
end

「rspec example_spec.rb --format doc」と実行すると、

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

かつ、出力には次の内容が含まれているはずです:

Array
with 3 items
is expected not to be empty
is expected not to be empty