当我使用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
rspec-mocks的旧:should
语法而不显式启用语法.使用新:expect
语法或显式启用:should
.
如何避免这种警告?
为了按原样删除代码警告,您必须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)
有关此内容及其用法的更多信息:
rspec-mocks中的pull请求
rspec-mocks中的功能示例
在撰写本文时,更改receive_message_chain
将包含在3.0.0.beta2
rspec-mocks 的发布中(请参阅更改日志).如果你现在想要它,你将不得不生活在最前沿,并在你的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
.
请参阅Myron对实际解决方案的回答.
RSpec.configure do |config| config.mock_with :rspec do |c| c.syntax = [:should, :expect] end end
请注意,正如Paul的回答所示,它正在设置rspec-mocks语法,而不是rspec-expectations语法.