Подтвердить что ты не робот

Использование неявного `subject` с` expect` в RSpec-2.11

С новым синтаксисом expect в rspec-2.11, как можно использовать неявный subject? Есть ли лучший способ, чем явно ссылаться на subject, как показано ниже?

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

Ответ 1

Если вы настроите RSpec на запрет синтаксиса should, вы все равно можете использовать старый синтаксис с одним слоем, поскольку в него не добавляется should для каждого объекта:

describe User do
  it { should be_valid }
end

Мы кратко обсудили альтернативный синтаксис с одним слоем, но решили против него, поскольку он не нужен, и мы чувствовали, что это может добавить путаницу, Однако вы можете легко добавить это, если предпочитаете, как он читает:

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

Ответ 2

С 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

Ответ 3

Можно использовать новый синтаксис названного объекта, хотя он не является неявным.

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

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