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

暗黙的に定義された主題

もしexampleグループの最初の引数がクラスである場合、そのクラスのインスタンスはsubjectメソッドを通じて各exampleに公開されます。

以下の例は、subjectがユーザーに対してどのように使用されるかを示していますが、カスタムマッチャーや拡張ライブラリのサポートにのみ使用することをお勧めします。これにより、exampleからsubjectの使用が隠されます。

トップレベルグループでのsubjectの公開

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

RSpec.describe Array do
it "should be empty when first created" do
expect(subject).to be_empty
end
end

rspec ./top_level_subject_spec.rbを実行すると、

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

ネストされたグループでのsubject

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

RSpec.describe Array do
describe "when first created" do
it "should be empty" do
expect(subject).to be_empty
end
end
end

rspec nested_subject_spec.rbを実行すると、

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

異なるクラスを持つネストされたグループでのsubject(最も内側のものが優先されます)

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

class ArrayWithOneElement < Array
def initialize(*)
super
unshift "first element"
end
end

RSpec.describe Array do
describe ArrayWithOneElement do
context "referenced as subject" do
it "contains one element" do
expect(subject).to include("first element")
end
end
end
end

rspec nested_subject_spec.rbを実行すると、

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