Как заглушить метод модуля внутри контроллера с Мокко - PullRequest
0 голосов
/ 04 ноября 2018

У меня есть приложение Sinatra:

my_module.rb

module MyModule
  def my_method
    "yay"
  end
end

app.rb

get "/my_module" do 
  puts my_method
end

Я пытаюсь заглушить my_method на тесте с Minitest и mocha.

def test_my_method
  MyModule.stubs(:my_method).returns("stubbed")
  get "/my_module"
end

Но, похоже, это не сработает, потому что оригинальный метод все еще вызывается. Есть мысли о том, как это сделать? Спасибо!

1 Ответ

0 голосов
/ 05 ноября 2018

Я нашел два разных способа добиться этого.

1) Использование заглушки для любого экземпляра gem .

С этим драгоценным камнем я мог бы заглушить любое существо Sinatra::Application. Таким образом, решение выглядит так:

def test_my_method
  Sinatra::Application.stub_any_instance(:my_method, "stubbed") do
    get "/my_module"
    # => stubbed
  end
end

2) Использование mocha any_instance .

Это решение следует тому же принципу. Просто используя mocha s методы.

def test_my_method
  Sinatra::Application.any_instance.stubs(:my_method).returns("stubbed")
  get "/my_module"
  # => stubbed
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...