私はRailsの初心者であり、ビュー内の未定義のメソッドで失敗する機能テストに問題があります:
1) Error:
test_should_get_index(OrdersControllerTest):
ActionView::Template::Error: undefined method `name' for nil:NilClass
app/views/orders/index.html.erb:19:in `_app_views_orders_index_html_erb__2011622583_2177866460_0'
app/views/orders/index.html.erb:14:in `_app_views_orders_index_html_erb__2011622583_2177866460_0'
app/controllers/orders_controller.rb:8:in `index'
/test/functional/orders_controller_test.rb:9:in `test_should_get_index'
ブラウザではすべて問題ありませんが、テストが失敗するだけです。
views/orders/index.html.erb
ファイルの内容は次のとおりです。
<% @orders.each do |order| %>
<tr>
<td><%= order.name %></td>
<td><%= order.address %></td>
<td><%= order.email %></td>
<td><%= order.pay_type.name %></td>
Pay_type
支払いタイプ名を含む別のテーブルです。orders テーブルには という外部キーがありますpay_type_id
。ブラウザーでは、支払タイプ名とステートメントが正しく表示されorder.pay_type.name
ますが、機能テストは失敗します。
test_should_get_index:
test "should get index" do
get :index
assert_response :success
assert_not_nil assigns(:orders)
end
注文備品:
one:
name: Dave Thomas
address: MyText
email: dave@example.org
pay_type_id: 1
two:
name: MyString
address: MyText
email: MyString
pay_type_id: 1
支払いタイプの備品:
one:
id: 1
name: Check
two:
id: 2
name: Credit Card
three:
id: 3
name: Purchase Order
*orders_controller:*
def index
@orders = Order.paginate :page=>params[:page], :order=>'created_at desc',
:per_page => 10
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @orders }
end
end
誰かが私を助けることができますか?
raise Exception.new(@orders.inspect)
ビューに追加すると、次のエラーが発生します。
`1) Error:
test_should_get_index(OrdersControllerTest):
ActionView::Template::Error: [#<Order id: 298486374, name: "MyString", address: "MyText", email: "MyString", created_at: "2013-02-12 14:05:11", updated_at: "2013-02-12 14:05:11", pay_type_id: 1>, #<Order id: 980190962, name: "Dave Thomas", address: "MyText", email: "dave@example.org", created_at: "2013-02-12 14:05:11", updated_at: "2013-02-12 14:05:11", pay_type_id: 1>]
app/views/orders/index.html.erb:14:in `_app_views_orders_index_html_erb__1955286768_2214618420_0'
app/controllers/orders_controller.rb:8:in `index'
/test/functional/orders_controller_test.rb:9:in `test_should_get_index'`