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

Как избежать предупреждения об устаревании для stub_chain в RSpec 3.0?

Когда я запускаю тест с помощью stub_chain, я получу предупреждение об отказе.

describe "stubbing a chain of methods" do
  subject { Object.new }

  context "given symbols representing methods" do
    it "returns the correct value" do
      subject.stub_chain(:one, :two, :three).and_return(:four)
      expect(subject.one.two.three).to eq(:four)
    end
  end
end

Предупреждения об отставке: Использование stub_chain из старого синтаксиса :should rspec-mocks без явного включения синтаксиса устарело. Используйте новый синтаксис :expect или явно включите :should.

Как можно избежать этого предупреждения?

4b9b3361

Ответ 1

RSpec.configure do |config|
  config.mock_with :rspec do |c|
    c.syntax = [:should, :expect]
  end
end

Обратите внимание, что он устанавливает синтаксис rspec-mocks, а не синтаксис rspec-ожидания, как показывает ответ Павла.

Ответ 2

Чтобы избавиться от предупреждения с вашим кодом как есть, вам нужно явно включить синтаксис should в вашей конфигурации:

RSpec.configure do |config|
  config.expect_with :rspec do |c|
    c.syntax = [:should, :expect]
  end
end

Забастовкa >

Синтаксис замены для stub_chain:

allow(object).to receive_message_chain(:one, :two, :three).and_return(:four)
expect(object.one.two.three).to eq(:four)

Дополнительная информация об этом и его использовании в:

Начиная с этой записи изменение receive_message_chain будет включено в выпуск 3.0.0.beta2 rspec-mocks (см. Changelog). Если вы хотите это прямо сейчас, вам придется жить на краю кровотока и добавить конкретную ссылку на фиксацию в свой Gemfile, чтобы получить receive_message_chain:

gem 'rspec-mocks', github: 'rspec/rspec-mocks', ref: '4662eb0'

К сожалению, это на самом деле не отвечает на ваш вопрос об избавлении от сообщения об обесценении, которое я не смог сделать, даже с предварительной версией rspec-mocks и c.syntax = [:should, :expect] явно указывается в моей конфигурации RSpec.

Таким образом, я бы сказал, что ваши варианты должны либо дождаться, пока 3.0.0.beta2 будет выпущен, и посмотрим, будут ли уведомления об устаревании исправлены с вашим существующим кодом в то время, либо принесут самые последние изменения и изменит ваш синтаксис на receive_message_chain. Забастовкa >

Обратитесь к Myron answer для фактического решения.

Ответ 3

Вот решение, которое сработало для меня - я использую Rails 4.1.7:

Внутри spec/spec_helpber.rb задайте rspec-ожидания и/или синтаксис rspec-mocks следующим образом:

RSpec.configure do |config|
  config.mock_with :rspec do |mocks|
    mocks.syntax = [:should, :expect]
  end
  config.expect_with :rspec do |expectations|
    expectations.syntax = [:should, :expect]
  end
end

Надеюсь, это поможет кому-то еще:)

Ответ 4

Для тех, кто хочет обновить старый проект до нового синтаксиса, здесь есть инструмент здесь.

Как упоминалось в Relish blog, они, вероятно, перенесут синтаксис if в внешний камень в будущем, это заставляет меня думать, что это в конечном итоге будет устаревшим.