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 parial 有消息“没有库存”。然后你可能有一个像这样的规范:

  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 回答