Rspec测试不渲染布局

时间:2013-05-16 16:14:30

标签: ruby-on-rails rspec

我可以测试我的控制器以使用

呈现某个布局
expect { get :index }.to render_template(layout: 'my_layout')

但是如何测试控制器以呈现NO布局?

以下第一个期望通过,但要小心:第二个期望也过去了! (测试相同的代码)

expect { get :index }.to render_template(layout: false)
expect { get :index }.to render_template(layout: true)

2008年11月,@ david-chelimsky说:

  

我成功处理此问题的一种方法是为此进行integration_views   一个例子(在它自己的组中)并指定来自的html元素   表单中没有布局。这是一个脆弱的例子,但它是   只有一个。

我不想检查渲染的视图,但到目前为止我找不到更好的解决方案。

有人有一个好方法吗?

3 个答案:

答案 0 :(得分:4)

在我没有布局的测试中,我只检查它是否没有加载“应用程序”布局

expect { get :index }.to_not render_template(layout: "application")

答案 1 :(得分:3)

虽然不是一个漂亮的衬垫(你可以随时添加辅助方法),但我发现你可以这样做:

get :index
@templates.keys.should include(nil)

我对此进行了测试,它仅在我设置layout false时有效。基于implementation of assert_template,它收集实例变量中的一些信息。相关的是@templates@layouts - 每个是由字符串键入的哈希值,对应于呈现的次数。

@templates将包含用于您的操作的模板(例如"users/show"),但@layouts将仅列出布局。如果没有使用布局,则看起来像{nil=>1}。这似乎是你唯一可以利用的东西。

所以也许做一个辅助方法或custom matcher来做这件事可能会很好。

答案 2 :(得分:0)

我是用这个衬里

做的
size

版本:Rspec = 3.4.0,Rails~> 4.2.5