Тест 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