Rails:函数测试在视图中未定义的方法失败

时间:2013-02-12 12:49:20

标签: ruby-on-rails testing view

我是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

paytypes灯具:

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'`

1 个答案:

答案 0 :(得分:0)

@orders中的内容为零,当您在其上调用name时会出现错误。确保@orders只包含订单,并且在测试时不包含nil。