当我使用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
弃用警告:
在不明确启用语法的情况下,使用rspec-mocks的旧stub_chain
语法中的:should
已弃用。使用新的:expect
语法或明确启用:should
。
如何避免这种警告?
答案 0 :(得分:68)
<击>
为了按原样删除代码警告,您必须在配置中明确启用should
语法:
RSpec.configure do |config|
config.expect_with :rspec do |c|
c.syntax = [:should, :expect]
end
end
击> <击> 撞击>
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
的更改将包含在rspec-mocks的3.0.0.beta2
版本中(请参阅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
发布,看看当时是否修改了现有代码的弃用通知,或者引入最新的更改并将语法更改为{{1 }}。
击>
请参阅Myron's answer了解实际解决方案。
答案 1 :(得分:32)
RSpec.configure do |config|
config.mock_with :rspec do |c|
c.syntax = [:should, :expect]
end
end
请注意,正如Paul的回答所示,它正在设置rspec-mocks语法,而不是rspec-expectations语法。
答案 2 :(得分:3)
这是一个对我有用的解决方案 - 我使用的是Rails 4.1.7:
在spec / spec_helpber.rb中,设置rspec-expectations'和/或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
希望这有助于其他人:)
答案 3 :(得分:0)
对于任何想要将旧项目升级为新语法的人,都有一个工具here。
如Relish blog中所述,他们可能会在未来将should语法移动到外部gem中,这让我相信它最终会被淘汰。