Ответ 1
RSpec.configure do |config|
config.mock_with :rspec do |c|
c.syntax = [:should, :expect]
end
end
Обратите внимание, что он устанавливает синтаксис rspec-mocks, а не синтаксис rspec-ожидания, как показывает ответ Павла.
Когда я запускаю тест с помощью 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
.
Как можно избежать этого предупреждения?
RSpec.configure do |config|
config.mock_with :rspec do |c|
c.syntax = [:should, :expect]
end
end
Обратите внимание, что он устанавливает синтаксис rspec-mocks, а не синтаксис rspec-ожидания, как показывает ответ Павла.
Чтобы избавиться от предупреждения с вашим кодом как есть, вам нужно явно включить синтаксис 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 для фактического решения.
Вот решение, которое сработало для меня - я использую 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
Надеюсь, это поможет кому-то еще:)
Для тех, кто хочет обновить старый проект до нового синтаксиса, здесь есть инструмент здесь.
Как упоминалось в Relish blog, они, вероятно, перенесут синтаксис if в внешний камень в будущем, это заставляет меня думать, что это в конечном итоге будет устаревшим.