0

私はテストをしています:

 def setup
    @cart = FactoryGirl.create(:cart_with_1_row)
  end

  test "should get show" do
    sign_in(FactoryGirl.create(:user, admin: true))
    FactoryGirl.create(:product_request)
    session[:cart_id] = @cart.id
    get :show, id: @cart.id
    assert_response :success
    assert_not_nil assigns(:product_requests)
  end

およびコントローラー:

 def show
    cart = current_cart
    @product_requests = ProductRequest.find_all_by_cart_id(current_cart)
    cart.destroy
  end

そして、ビューから以下を削除しない限り、これは失敗します。

<h6><%= @product_requests.first.user.first_name %> <%= @product_requests.first.user.last_name %></h6>
<h6><%= @product_requests.first.street %></h6>
<h6><%= @product_requests.first.city %>, <%= @product_requests.first.state %> <%= @product_requests.first.zip %></h6>

エラーは次のとおりです。

  1) Error:
test_should_get_show(CartsControllerTest):
ActionView::Template::Error: undefined method `user' for nil:NilClass

これは、.firstでユーザーを呼び出すことがそれを作成していることを意味しますか?このページは、開発環境と本番環境で正常に機能します。

健全性チェックとして、<%= product_request.user.first_name %>ivarの各メソッド内に配置しましたが、それは機能しました。私はこれを正しく解釈していますか?最初が問題ですか?

問題のビューは次のようになります。

<h6><%= @product_requests.first.user.first_name %> <%= @product_requests.first.user.last_name %></h6>
    <h6><%= @product_requests.first.street %></h6>
    <h6><%= @product_requests.first.city %>, <%= @product_requests.first.state %> <%= @product_requests.first.zip %></h6

<% @product_requests.each do |product_request| %>
<%= product_request.user.first_name %>
<% end %>
4

1 に答える 1

1

あなたはほとんどそこにいました-ここでの問題は@product_requestsが空であるということです、それで@product_requests.firstnilを返しますそしてnil.firstは確かに問題です。

それ自体がゼロではないことを確認することをお勧めしますcurrent_cart-それが原因の私の推測です。

于 2012-09-04T21:17:23.507 に答える