Как протестировать частичную версию haml с ранним возвратом?

#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 предлагает это с другой стороны)