我有一个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解析),因此,我无法单独测试和控制器。
答案 0 :(得分:0)
要解决路由问题,您需要在规范中向:format => :json
请求添加get
。
get :index, :format => :json