2016-12-14 3 views
0

Я в настоящее время работаю через Agile Development with Rails 5 и столкнулся с проблемой с моим тестированием. А именно, существует несоответствие ассоциации, когда он ожидает Продукт, но получает строку. Я пробовал исправление строки в строке line_items_controller_test.rb от @ line_item.product до @ line_item.product_id безрезультатно, и я все равно так шутил, как знаю.Rails 5 Неудачное тестирование ActiveRecord :: AssociationTypeMismatch

Вот мой тестовый файл line_items_controller_test.rb

test "should update line_item" do 
    patch line_item_url(@line_item), params: { line_item: { cart_id: @line_item.cart_id, product: @line_item.product } } 
    assert_redirected_to line_item_url(@line_item) 
    end 

и мой отказ тест от терминала

Error: 
LineItemsControllerTest#test_should_update_line_item: 
ActiveRecord::AssociationTypeMismatch: Product(#70143083725900) expected, got String(#70143078473840) 
    app/controllers/line_items_controller.rb:47:in `block in update' 
    app/controllers/line_items_controller.rb:46:in `update' 
    test/controllers/line_items_controller_test.rb:40:in `block in <class:LineItemsControllerTest>' 


bin/rails test test/controllers/line_items_controller_test.rb:39 

и здесь сам контроллер, где он упоминает 47 и 46 начиная с respond_to

def update 
    respond_to do |format| 
     if @line_item.update(line_item_params) 
     format.html { redirect_to @line_item, notice: 'Line item was successfully updated.' } 
     format.json { render :show, status: :ok, location: @line_item } 
     else 
     format.html { render :edit } 
     format.json { render json: @line_item.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

Дайте мне знать, если вам нужна дополнительная информация. Вы также можете проверить мое репо на https://github.com/jamesemcc/depot

+0

Можете ли вы опубликовать метод 'line_item_params'? – Pavan

+0

Можете ли вы обновить позицию в своем приложении? –

ответ

1

Ok. Есть проблемы не только в вашем тесте, но и в приложении.

  1. https://github.com/jamesemcc/depot/blob/master/app/controllers/line_items_controller.rb#L75 Вы должны разрешить product_id, не product здесь. Вы не можете передать Product объект из браузера.
  2. Вы должны пройти product_id из поля зрения и из теста

Удачи!

+0

Удивительный, спасибо unkmas! Я думаю, что это связано с случайным написанием «product: reference» вместо 'product: references', когда я создал LineItem. – jamesemcc

Смежные вопросы