Тестирование помощников вида: как мне указать контроллер? - PullRequest
3 голосов
/ 12 января 2011

Рассмотрим, например, следующий код:

class ViewHelpersTest < ActionView::TestCase
  should 'generate tag with correct parameters' do
    assert_equal theme_stylesheet_link_tag('style', :media => 'print'),
                 '<link href="/themes/default/stylesheets/style.css" media="print" rel="stylesheet" type="text/css" />'                     
  end
end

current_theme_stylesheet_tag - помощник вида, который создает тег ссылки на таблицу стилей, который указывает на файл CSS, расположенный в каталоге текущей темы.Текущую тему можно получить, вызвав ApplicationController::current_theme.

Итак, мне нужно предоставить действительный экземпляр контроллера, что подводит меня к моему вопросу:

Как точно указать контроллер дляиспользоваться при тестировании помощников вида в Rails 3?

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

Ответы [ 2 ]

2 голосов
/ 12 января 2011

Я не большой поклонник помощников по тестированию, но если вы сделаете это, лучше всего подходить к нему как к модульному тесту, поэтому вы хотите изолировать метод от зависимостей. В этом случае вместо того, чтобы пытаться создать объект контроллера, вы можете просто создать фиктивный объект и заглушить необходимый вызов метода.

В RSpec это может работать так, если ваш current_theme метод просто возвращает строку:

describe ViewHelper do
  it "should generate tag with correct parameters" do
    ApplicationController = double(:current_theme=>"A string")
    helper.my_helper_method("argument").should == "A string"
  end
end

Когда вспомогательный метод выполняет ApplicationController::current_theme, он использует заглушку вместо фактического метода, поэтому нет необходимости создавать экземпляр контроллера или даже запрашивать код контроллера.

0 голосов
/ 12 января 2011

Я не эксперт по тестированию, но мне интересно, должен ли это быть тест контроллера, а не тест представления.Например, Rails Guides описывает тесты вида как «утверждение наличия ключевых элементов HTML и их содержимого».

Если вы устанавливаете тему в контроллере, можете ли вы протестировать ее там?

...