web-dev-qa-db-ja.com

RSpec-2.11の暗黙の `subject`を` expect`で使用する

Rspec-2.11の新しいexpect構文では、暗黙のsubjectをどのように使用できますか?以下のように、subjectを明示的に参照するよりも良い方法はありますか?

describe User do
  it 'is valid' do
    expect(subject).to be_valid    # <<< can `subject` be implicit?
  end
end
42
Hosam Aly

should構文を無効にするようにRSpecを構成する場合、すべてのオブジェクトにshouldを追加する必要がないため、古い1行構文を使用できます。

describe User do
  it { should be_valid }
end

簡単に説明します 代替の1行の構文ですが、不要であり、混乱を招く可能性があるため、これに反対する決定をしました。ただし、読み方がお好みであれば、自分で簡単に追加できます。

RSpec.configure do |c|
  c.alias_example_to :expect_it
end

RSpec::Core::MemoizedHelpers.module_eval do
  alias to should
  alias to_not should_not
end

これを配置すると、次のように書くことができます。

describe User do
  expect_it { to be_valid }
end
64
Myron Marston

Rspec 3.0ではis_expected説明どおり ここ

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
17
Javid Jamae

暗黙的ではありませんが、新しい名前付きサブジェクト構文を使用できます。

describe User do
  subject(:author) { User.new }

  it 'is valid' do
    expect(author).to be_valid
  end
end
12
Hosam Aly