Минимальное предупреждение: УСТАРЕЛО глобальное использование must_match.Используйте `_ (obj)` - PullRequest
0 голосов
/ 27 сентября 2019

Я пишу следующий тест с 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

Тест успешно выполнен, но выдает предупреждение:

УСТАРЕЛО: глобальное использование must_match изnet_test.rb: 16 Вместо этого используйте _(obj).must_match.Это не удастся в Minitest 6

Чтобы устранить предупреждение, я изменяю строку:

net.must_match /Example Domain/i

на

_(net).must_match /Example Domain/i

Я не видел _(obj) синтаксис раньше, поэтому мой вопрос в том, что _() делает в этом случае.

1 Ответ

1 голос
/ 27 сентября 2019

Это специфичная для минитест функция.Из документации:

  # 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

Вы можете копатьв источники здесь

...