#ruby-on-rails #rspec #haml
#ruby-on-rails #rspec #haml
Вопрос:
У меня есть часть haml, которая должна отображаться только для определенных людей, поэтому в начальной строке у нее есть - return unless
:
- return unless user.is_allowed_to_see_this?
stuff here for only them to see
Отлично работает в приложении, но при тестировании представления render
помощник rspec выдает no implicit conversion of nil into String
при попытке отобразить частичную часть вместо того, чтобы возвращать empty / nil. Итак, чтобы проверить, что частичная версия работает, тест должен выглядеть следующим образом:
it 'does not show to unallowed user' do
user = users(:not_allowed)
expect do
render('the/haml_partial', user: user)
end.to raise_error(TypeError)
end
Такое ощущение, что он тестирует неправильную вещь? Я чувствую, что ожидаемое должно быть чем-то вроде
expect(rendered).to be_empty
Я некоторое время копался в документации и не нашел ничего, что, похоже, работает для этого. Изменение - return unless...
на - if...
заставляет render
вызов возвращать пустую строку, а не ошибку. И, может быть, это исправление? Но я хотел бы найти способ сохранить ранний возврат, который, как мне кажется, легче понять, поскольку нет возможности else
подумать.
Комментарии:
1. Логика в представлении. Отвратительно. Я бы сказал, перенесите эту логику, возможно, в PORO и упростите ваше тестирование.
2. Да, это довольно вонючее — частичному пользователю не следует решать, будет ли оно визуализировано или нет. Это не входит в его обязанности.
3. Я бы сказал, что это вина Rails. Он не предлагает способа написать это СУХО. (cells gem предлагает это с другой стороны)