如何避免RSpec 3.0中stub_chain的弃用警告?

 蕶ok薍 发布于 2023-02-13 21:23

当我使用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_chainrspec-mocks的旧:should语法而不显式启用语法.使用新:expect语法或显式启用:should.

如何避免这种警告?

2 个回答
  • 为了按原样删除代码警告,您必须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.beta2rspec-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对实际解决方案的回答.

    2023-02-13 21:29 回答
  • RSpec.configure do |config|
      config.mock_with :rspec do |c|
        c.syntax = [:should, :expect]
      end
    end
    

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

    2023-02-13 21:31 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有