Rspec测试不渲染布局

Rob*_*bin 11 rspec ruby-on-rails

我可以测试我的控制器以呈现某个布局

expect { get :index }.to render_template(layout: 'my_layout')
Run Code Online (Sandbox Code Playgroud)

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

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

expect { get :index }.to render_template(layout: false)
expect { get :index }.to render_template(layout: true)
Run Code Online (Sandbox Code Playgroud)

2008年11月,@ david-chelimsky说:

我成功处理这个问题的一种方法是在这个例子(在它自己的组中)中使用integrate_views,并指定布局中的html元素不在表单中.这是一个脆弱的例子,但它只是一个.

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

有人有一个好的方法吗?

MrD*_*anA 3

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

get :index
@templates.keys.should include(nil)
Run Code Online (Sandbox Code Playgroud)

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

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

因此,也许制作一个辅助方法或自定义匹配器来执行此操作可能会很好。