Rails 3 - Тестирование, если View вызывает метод - PullRequest
2 голосов
/ 03 сентября 2010

Я начинаю изучать Rails. Я использую Rails 3.

В моем простом приложении у меня есть следующий код:

<% @tasks.each do |task| %>
  ...
    <td><%= friendly_estimate task.estimate, { :compact => true } %></td>
  ...
<% end %>

Миссия для меня состоит в том, чтобы я хотел проверить, действительно ли представление отправляет опцию: compact моему методу, чтобы убедиться, что оценка отображается в данный момент.

Итак, спецификация вроде:

Оценки должны быть показаны в компактном виде, на страницах списков

Я новичок в тестировании в Ruby и совершенно новый в тестировании View, поэтому я надеюсь, что кто-то может помочь или указать мне правильное направление.

Спасибо:)

Ответы [ 2 ]

2 голосов
/ 03 сентября 2010

Несмотря на то, что вы можете проверить использование компактной опции, отправляемой вспомогательному методу friendly_estimate, используя различные методы, основная цель функционального теста - не проверка реализации, а вывод.

Если вы изучите вывод, вы сможете определить, было ли использовано правильное форматирование.Самый простой способ сделать это - вставить некоторый класс CSS, который можно идентифицировать в функциональном тесте.Например, оберните ваш компактный формат в <span class="compact"> и затем проверьте его с помощью селектора CSS, используя assert_select :

assert_select 'td span.compact'

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

1 голос
/ 04 сентября 2010

Я использую rspec, и с его помощью это действительно очень просто.

Способ, которым я бы протестировал это

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

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

Так как вы это сделаете?

В rspec вы можете просто смоделировать вспомогательный метод, например так:

template.should_receive(:friendly_estimate)

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

task = mock(Task)
task.should_receive(:estimate).and_return(SOME_ESTIMATE)
template.should_receive(:friendly_estimate).with(SOME_ESTIMATE, :compact => true)

это даст ошибку, еслиэти ожидания не оправдались.

Подробнее здесь .

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