我有一个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 解析),因此,我无法真正单独测试和控制器。