2016-12-14 74 views
0

我目前正在通過敏捷開發與Rails 5,並且遇到了我的測試問題。也就是說,在期望產品的地方存在關聯不匹配但獲得字符串。我已經嘗試將line_items_controller_test.rb中的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

好的。不僅在你的測試中,而且在應用程序中有問題。

  1. https://github.com/jamesemcc/depot/blob/master/app/controllers/line_items_controller.rb#L75您應當允許product_id,不product這裏。您無法從瀏覽器傳遞Product對象。
  2. 你應該通過product_id從視圖和測試

祝您好運!

+0

真棒,謝謝unkmas!我認爲這是因爲當我生成LineItem時,意外地寫了'product:reference'而不是'product:references'。 – jamesemcc

相關問題