我可以测试我的控制器以使用
呈现某个布局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元素 表单中没有布局。这是一个脆弱的例子,但它是 只有一个。
我不想检查渲染的视图,但到目前为止我找不到更好的解决方案。
有人有一个好方法吗?
答案 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