ruby - Minitest 警告 : DEPRECATED global use of must_match. 使用 `_(obj)`

标签 ruby testing minitest

我正在使用 Minitest 5.12.0 编写以下测试:

require 'minitest/autorun'
require 'nokogiri'
require 'net/http'

class NetClass; end

describe NetClass do
  attr_accessor :uri, :net
  before do
    @uri=URI('http://example.com/index.html')
    @net=Net::HTTP.get(uri)
  end

  it 'gets uri' do
    net.must_match /Example Domain/i
  end
end

测试成功但输出警告:

DEPRECATED: global use of must_match from net_test.rb:16 Use _(obj).must_match instead. This will fail in Minitest 6

为了消除警告,我更改了行:

net.must_match /Example Domain/i

_(net).must_match /Example Domain/i

我之前没有见过 _(obj) 语法,所以我的问题是 _() 在这种情况下做了什么。

最佳答案

这是 minitest 特定的功能。来自文档:

  # Returns a value monad that has all of Expectations methods
  # available to it.
  #
  # Also aliased to #value and #expect for your aesthetic pleasure:
  #
  #         _(1 + 1).must_equal 2
  #     value(1 + 1).must_equal 2
  #    expect(1 + 1).must_equal 2

因此,它是一个将所有需要的测试方法添加到您的对象的包装器。

实现如下:

  def _ value = nil, &block
    Minitest::Expectation.new block || value, self
  end

您可以深入研究资源 here

关于ruby - Minitest 警告 : DEPRECATED global use of must_match. 使用 `_(obj)`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58128241/

相关文章:

ruby-on-rails - Rails:将当前用户的已发布项目和未发布项目显示为 ActiveRecord::Relation

android - 如何测试 SingleLiveEvent<Void> 变量?

java - 使用 Web 界面或任何可视化工具运行 Selenium WebDriver 测试

ruby - 是否可以在 Rspec 中访问周围上下文的主题?

ruby-on-rails - 在所有 MiniTest 测试中包含模块,就像在 RSpec 中一样

ruby-on-rails - capybara 未定义方法 `expect' 用于 capybara :Module

ruby-on-rails - 模型未保存时在客户端获取错误文本

ruby - Minitest - 测试不运行 - 没有 Rails

ruby - 使用 Ruby XcodeProj 创建 Xcode 项目

ruby-on-rails - 如何在 Rails 中测试带有 'Thread.new' 的代码?