Как проверить Rails: helper_methods, которые живут в application.rb? - PullRequest
1 голос
/ 18 января 2010

Вот моя ситуация - у меня есть помощник с именем LayoutHelper, который я использую, чтобы помочь мне построить макет, и я пытаюсь протестировать следующий метод.

У него есть метод в LayoutHelper, который выглядит примерноthis:

def show_login_form?
  return false if @hide_login_form || logged_in?
  return true
end

У меня также есть следующее в моем application.rb:

helper_method :logged_in?

def logged_in?
  return @logged_in_user.present?
end

И, наконец, мой тестовый файл выглядит так:

require File.dirname(__FILE__) + '/../../test_helper'                          

class LayoutHelperTest < ActionView::TestCase                                  

  def test_hide_login_form                                                     
    assert(show_login_form?)                                                   
    hide_login_form                                                            
    assert(!show_login_form?)                                                  
  end                                                                          

end

Теперь моя проблема в том, что когда я запускаю этот тест, я получаю следующее:

NoMethodError: undefined method `logged_in?' for #<LayoutHelperTest:0xb7a7aca8>
app/helpers/layout_helper.rb:17:in `show_login_form?'
layout_helper_test.rb:12:in `test_hide_login_form'

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

1 Ответ

0 голосов
/ 18 января 2010

Я должен сказать, что это сначала озадачило меня - но я наконец понял, что было не совсем правильно.

Помощники являются генераторами HTML и должны быть построены в виде пузыря - не зная, что происходит в сеансах, контроллерах и т. Д. Ваш метод show_login_form? не генерирует код, он работает с методами контроллера. Он должен быть в самом файле application_controller.rb и проверен в тестах контроллера.

Как только вы переместите его сюда, у вас не должно быть проблем с тестированием. О, и это может быть более короткий и сладкий способ написать сам метод:

def show_login_form?
  !(@hide_login_form || logged_in?)
end

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...