2013-11-28 43 views
32

当我用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 

废弃警告: 从rspec的,嘲笑的老:should语法使用stub_chain不显式启用的语法已经过时了。改用新的:expect语法或明确启用:should

如何避免此警告?

回答

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

请注意,它设置rspec-mocks语法,而不是rspec-expectations语法,正如Paul的答案所示。

+0

+1感谢您的澄清。完全错过了。 –

+0

请参阅[相关的大约2015/2016的方式](http://stackoverflow.com/questions/28050261/issue-with-stubs-and-rspec-old-syntax)。 –

64

为了摆脱的警告与您的代码作为 - 是,你必须明确地允许在你的配置中 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将被列入3.0.0.beta2发布RSpec的,嘲笑的(见Changelog)。如果你想让它现在,你必须生活在最前沿,并添加特定提交引用您的Gemfile获得receive_message_chain工作:

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

不幸的是,实际上并没有回答你的问题关于摆脱我无法做到的折旧消息,即使使用rspec-mocks的预发布版本和我的RSpec配置中明确设置的折旧消息。

所以,我会说你的选择是要么等到 3.0.0.beta2被释放,看看是否弃用通知得到修复与当时现有的代码,或在最新变化带来的,改变你的语法 receive_message_chain

有关实际解决方案,请参见Myron's answer

+2

有你'stub_chain'试过吗?即使显式启用了':should',警告仍会保留在github标记为'v3.0.0.beta1'的版本上,我认为这是最新版本。 –

+0

好的。它不适用于'v3.0.0.beta1',我会编辑我的答案。 –

0

对于任何想要将旧项目升级到新语法的人,都有一个工具here

正如Relish blog中提到的那样,他们可能会在未来将should语法转化为外部gem,这使我相信它最终会被淘汰。

3

这里是为我工作的解决方案 - 我用Rails 4.1.7:

内部规格/ spec_helpber.rb,设置rspec的期许和/或rspec的-嘲笑的语法如下:

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 

希望这有助于别人:)