Rails 2.3.x - Как заглушить вспомогательный метод (который вызывается из представления) в функциональном тесте (без RSpec)? - PullRequest
4 голосов
/ 18 мая 2011

Пожалуйста, не говорите мне "искать больше" или что-то еще, потому что все решения по подобному вопросу не удаются.

Simple: У меня есть функциональные тесты. Я хочу просто получить и посмотреть, отображается ли правильный контент

  test "displays headline if user should see it" do
    get :index  
    assert_match /headline/, response.body
  end

  test "doesn't display headline if user shouldn't see it" do
    get :index
    assert_no_match /headline/, response.body
  end

и простой вид

  <% if show_headline?(arg) %>
    headline
  <% end %>

и помощник:

  module TheHelper
    def show_headline?(arg)
      arg ? hard_code_logic : even_harder_logic
    end
  end

так что мне нужно сделать в тесте что-то вроде:

  test "displays headline if user should see it" do
    Something.stubs(:show_headline?).returns(true)

    get :index  
    assert_match /headline/, response.body
  end

  test "doesn't display headline if user shouldn't see it" do
    Something.stubs(:show_headline?).returns(false)

    get :index
    assert_no_match /headline/, response.body
  end

Вопрос в том, что такое Нечто? Я хочу заглушить его, потому что у меня есть помощники, проверенные в подразделении / помощниках.

После того, как вспомогательный модуль get будет добавлен в класс контроллера. Пожалуйста, не давайте мне ссылки на другие ответы, я их читаю (но, конечно, я мог бы прочитать не те), и они не работают для меня. Я использую Rails 2.3.10 с mocha 0.9.8.

Вещи, которые не работают:

TheController.any_instance.stubs(:show_headline?)
ActionView::Base.any_instance...
@controller.stubs...

UPDATE:

единственное, что сработало, было:

  <% self.stubs(:show_headline?).returns(true) >%
  <% if show_headline?(arg) %>
    headline
  <% end %>

но, конечно, я не буду использовать это ... может быть, это ключ

...