0

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

4

1 回答 1

0

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

get :index, :format => :json
于 2013-09-26T05:23:40.567 回答