我有个测试:
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上调用用户就是在创建它?该页面在开发和生产环境中运行良好。
作为一个健全的检查,我在ivar上的each方法中放入了<%= product_request.user.first_name %>,这是有效的。我是否正确地理解了.first是问题所在?
有问题的视图如下所示:
<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 %>发布于 2012-09-05 05:17:24
这里的问题是@product_requests是空的,所以@product_requests.first返回nil,而nil.first确实是问题所在。
我建议您验证current_cart本身不是零-这是我对原因的猜测。
https://stackoverflow.com/questions/12271334
复制相似问题