#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 один раз, но базовый код использовал его еще два раза, поэтому мне пришлось изначально отказаться от «третьего» использования.