RSpec でテストできるのに、コントローラーから .json.erb ファイルをレンダリングするのが最悪です。api_docs/index.json.erb と次のコントローラーがあります。
class ApiDocsController < ApplicationController
  respond_to :json
  def index
    render file: 'api_docs/index.json.erb', content_type: 'application/json'
  end
end
明示的なrender file行は不要のようですが、そうしないと、render template: 'api_docs/index.json.erb'「Missing template api_docs/index」というエラーが表示されます。同様に、ファイル名を渡さなければならない場合、正確なディレクトリを指定しなければならないのはさらに面倒です。Rails は、私の ApiDocsController テンプレートが api_docs ディレクトリにあることを認識している必要があります。
render fileまたはがあればrender template、期待どおり、ページにアクセスして index.json.erb ファイルの JSON コンテンツを取得できます。ただし、この RSpec テストは失敗します。
let(:get_index) { ->{ get :index } }
...
describe 'JSON response' do
  subject {
    get_index.call
    JSON.parse(response.body)
  }
  it 'includes the API version' do
    subject['apiVersion'].should_not be_nil
  end
end
行で失敗し、JSON.parse(response.body)Iraise response.bodyの場合、空の文字列です。コントローラーで行うrender json: {'apiVersion' => '1.0'}.to_jsonと、テストは問題なくパスします。
では、/api_docs に移動したときに ( .jsonURL の最後に配置する必要なく) JSON テンプレートを常にレンダリングし、ブラウザーと RSpec テストの両方で機能するようにするにはどうすればよいでしょうか? renderまた、ビューのフルパスを渡す長い呼び出しを行わなくても、テンプレートをレンダリングできますか?