12

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

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 说:

我成功处理此问题的一种方法是为这个示例(在它自己的组中)集成视图,并指定布局中的 html 元素不存在于表单中。这是一个脆弱的例子,但它只是一个。

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

有人有好的方法吗?

4

3 回答 3

4

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

expect { get :index }.to_not render_template(layout: "application")
于 2013-05-16T17:20:53.130 回答
3

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

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

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

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

所以也许制作一个辅助方法或自定义匹配器来做到这一点可能会很好。

于 2013-05-16T19:56:45.367 回答
0

我用这个衬里做到了

expect { get :index }.to render_template(layout: [])

版本: Rspec = 3.4.0 ,Rails ~> 4.2.5

于 2016-03-11T10:09:16.557 回答