Hi,
I'm having a problem writing a proper test for an exercise from "Agile Web 
Development with Rails 4.0". The exercise was about creating a member 
route, which was then used via ajax to decrement an cart item (ListItem) 
attribute, eventually destroying it when it hits 0. The route I wrote is:

resources :line_items do
  member do
    post 'decrement'
  end
end

Controller function 'decrement' uses a params[:id] for internal processing. 

The test I wanted to write was to check if the controller 'decrement' 
function indeed destroys the LineItem when its quantity 
(line_item.quantity) hits zero. I've therefore created a fixture:

one:
  product_id: 0
  cart_id: 0
  quantity: 1

and assigned it to @line_item in my 'line_items_controller_test.rb', where 
I wrote this test:

test "should destroy line_item via ajax" do
  assert_difference('LineItem.count') do
    xhr :post, :decrement, id: @line_item
  end
end

However, this throws the following error in my face:

LineItemsControllerTest#test_should_destroy_line_item_via_ajax:
NoMethodError: undefined method `id' for nil:NilClass
    app/controllers/line_items_controller.rb:16:in `decrement'
    test/controllers/line_items_controller_test.rb:61:in `block (2 levels) 
in <class:LineItemsControllerTest>'
    test/controllers/line_items_controller_test.rb:60:in `block in 
<class:LineItemsControllerTest>'

I tried variations of different parameters to xhr but with no success. I've 
also tried fixing the route passed by consulting rake routes, but it 
appears I don't really understand how this works. Any help would be deeply 
appreciated.

Thanks,
arca0

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/rubyonrails-talk/9458132a-ee23-47c3-b287-f75057aeebf5%40googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to