使用rspec在控制器中测试RABL模板响应

时间:2013-07-16 16:04:01

标签: ruby-on-rails ruby testing rspec rabl

我有一个before_filter来检查传入的params是否正确。如果传递了一个额外的参数或者如果存在必需的缺失参数,它会立即使用RABL呈现JSON错误(它是一个API应用程序)。

为此,我在错误捕捉功能中有以下两行:

json = render_to_string(template: 'errors/error')
render :json => json, :status => status

我正在尝试使用before_filter测试rspec回调中调用的参数验证方法。

现在rspec呈现一个空模板。一旦我在测试中调用验证方法,这会立即在我的控制器中抛出错误,如下所示:controller.validate_json(params, [:amount], nil, nil),因为validate_json方法使用了一些空字符串失败的JSON解析。

要解决此问题,我需要在render_views中致电rspec。当我这样做时,我得到一个非常奇怪的长错误:

RuntimeError:
       ActionController::RackDelegation#status=....

基本上是ActionController对象。它说的只是RuntimeError。它没有说明它是什么类型的错误或什么。这一行的错误:

render :json => json, :status => status

我还能在控制器中测试模板吗?我知道我可能需要对视图和控制器进行两种不同的测试,但我没有HTML视图,但是所有JSON视图都是在RABL中呈现的。在不使用render_views的情况下,我无法测试控制器,因为测试控制器的一部分是看到它返回了正确的状态以及正确的JSON。此外,validate_json方法将在空JSON上失败(由于空字符串JSON解析),因此,我无法单独测试和控制器。

1 个答案:

答案 0 :(得分:0)

要解决路由问题,您需要在规范中向:format => :json请求添加get

get :index, :format => :json