2011-01-12 2 views
3

Рассмотрим, например, следующий код:Тестирование помощников просмотра: как я могу указать контроллер?

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

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

В 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

Прошу прощения, но ИМХО это не имеет значения, если вы «поклонник тестирования помощников». Это метод, поэтому он должен быть протестирован. – rubiii

+0

Не нужно извиняться :) Если вы разрабатываете стиль BDD, и вы уже определили результат вспомогательных функций, я не вижу необходимости проверять помощника отдельно, особенно когда вы только рефакторинг просмотреть код. Я признаю, что спецификации полезны для сложных помощников. – zetetic

0

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

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

+0

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

+0

Я думаю, что zetetic представляет хороший вариант в его ответе. –

Смежные вопросы