Rail minitest stub_any_instance не работает

#ruby-on-rails #testing #minitest

#ruby-on-rails #тестирование #минимальный тест

Вопрос:

Я пытаюсь использовать, minitest/stub_any_instance но я продолжаю получать сообщение об ошибке, указывающее, что Tempfile не имеет метода stub_any_instance . Ниже приведен фрагмент кода — может кто-нибудь сказать, где я ошибаюсь? Прочитав исходный код stub_any_instance, я ожидал, что он будет добавлен stub_any_instance ко всем object типам, но, возможно, я чего-то не хватает. Спасибо.

 require 'test_helper'
require 'minitest/stub_any_instance'

class MyTests < ActionDispatch::IntegrationTest

  test "failure to create temp file causes failure" do
    Tempfile.stub_any_instance :new, raise("Fake failure") do
      ...some testing here
    end
  end
  

завершение

Комментарии:

1.Вы «поместить require 'minitest/stub_any_instance' в вашем minitest_helper.rb или тестовом файле.»?

2. это вверху файла

3. Хорошо, похоже, это потому, что Tempfile является классом DelegateClass. Если я попробую это с файлом, это сработает — ну вроде как. Проблема в том, что, как написано, повышение () происходит немедленно, а не при вызове File.new().

4. Это еще хуже. Кажется, что raise() вызывается при вычислении инструкции, и если я «исправлю» инструкцию (например, вместо нее вставлю ‘1’), то stub_any_instance пожалуется, потому что new() это не метод и его нельзя заглушить.

5. В конце я вложил initialize и добавил метод для установки «сбой n-го объекта с этим классом ошибок и этим сообщением». Я бы рекомендовал присвоить объекту суперкласс, потому что я обнаружил, что я использовал Tempfile один раз, но базовый код использовал его еще два раза, поэтому мне пришлось изначально отказаться от «третьего» использования.