5

rspec-rails 2.14.0 を実行している Rails 3.2.13 アプリがあり、テストでビューが特定のパーシャルをレンダリングすることを確認しようとしています。実際に機能しますが、このテストを追加する必要があります。これが私がこれまでに持っているものです:

require 'spec_helper'

describe 'users/items/index.html.haml' do
  let(:current_user) { mock_model(User) }

  context 'when there are no items for this user' do
    items = nil

    it 'should render empty inventory partial' do
      response.should render_template(:partial => "_empty_inventory")
    end

  end
end

これはエラーなしで実行されますが、合格しません。失敗は次のとおりです。

Failure/Error: response.should render_template(:partial => "_empty_inventory")
   expecting partial <"_empty_inventory"> but action rendered <[]>

アイデアをありがとう。

編集

これは私にとってはうまくいきますが、ピーターのソリューションの方が優れています...

context 'when there are no items for this user' do

  before do
    view.stub(current_user: current_user)
    items = nil
    render
  end

  it 'should render empty inventory partial' do
    view.should render_template(:partial => "_empty_inventory")
  end

end 

何らかの理由でrender、ビューを呼び出さなければならないのは直感に反していましたが、そうです...

4

1 に答える 1

7

したがって、特定のパーシャルがビュー仕様でレンダリングされるかどうかをテストする通常の方法は、パーシャルの実際のコンテンツをテストすることです。たとえば、_empty_inventory パリアルに「在庫がありません」というメッセージがあるとします。次に、次のような仕様がある場合があります。

  it "displays the empty inventory message" do
    render
    rendered.should_not have_content('There is no inventory')
  end

別の方法として、コントローラ スペックを使用することもできます。この場合、スペックを設定するときに「render_views」メソッドを呼び出す必要があります。次に、次のようなことができます

it 'should render empty inventory partial' do
  get :index, :user_id => user.id
  response.should render_template(:partial => "_empty_inventory")
end

コントローラー仕様の状態を設定したと仮定します。

于 2013-11-04T04:17:23.230 に答える