Тест Rspec для визуализации макета
Я могу проверить мой контроллер, чтобы сделать определенный макет с помощью
expect { get :index }.to render_template(layout: 'my_layout')
Но как я могу проверить контроллер, чтобы отобразить NO layout?
Следующее первое ожидание проходит , но будьте осторожны: второе ожидание также проходит! (тестирование одного и того же кода)
expect { get :index }.to render_template(layout: false)
expect { get :index }.to render_template(layout: true)
В ноябре 2008 года, @david-chelimsky сказал:
Один из способов, с помощью которого я успешно справился, - это интегрировать_views для этого один пример (в его собственной группе) и указать, что html-элементы из макета нет в форме. Это хрупкий пример, но это только один.
Я не хочу проверять рендеринг, но пока не нашел лучшего решения.
Есть ли у кого-то хороший подход?
Ответы
Ответ 1
В то время как не очень один лайнер (вы всегда можете добавить вспомогательный метод), я обнаружил, что вы можете это сделать:
get :index
@templates.keys.should include(nil)
Я тестировал это, и он работает только при установке layout false
. Основываясь на реализации assert_template, он собирает некоторую информацию в переменные экземпляра. Соответствующими являются @templates
и @layouts
- каждый из них является хешей, введенной строкой, соответствующей тому, сколько раз оно было визуализировано.
@templates
будет содержать шаблон, используемый для вашего действия (например, "users/show"
), но @layouts
будет отображать только макеты. Если макет не использовался, он выглядит как {nil=>1}
. Кажется, это единственное, что вы можете использовать.
Так что, возможно, было бы неплохо сделать вспомогательный метод или пользовательский макет, чтобы сделать это.
Ответ 2
В моих тестах, когда нет макета, я просто проверяю, не загружается ли "макет приложения"
expect { get :index }.to_not render_template(layout: "application")
Ответ 3
Я сделал это, используя этот один вкладыш
expect { get :index }.to render_template(layout: [])
Версии: Rspec = 3.4.0, Rails ~ > 4.2.5