Rails 5失败测试ActiveRecord :: AssociationTypeMismatch

时间:2016-12-14 05:27:20

标签: ruby-on-rails ruby testing activerecord

我目前正在使用Rails 5 进行敏捷开发,并且遇到了我的测试问题。也就是说,它存在一个关联不匹配的位置,它期望产品但获得一个字符串。我已经尝试将我的line_items_controller_test.rb中的行从@ line_item.product修复到@ line_item.product_id,但无济于事,并且已经知道了怎么做。

这是我的测试文件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

这里是控制器本身,它以respond_to

开头提到47和46
  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

查看我的回购

1 个答案:

答案 0 :(得分:1)

确定。不仅在您的测试中存在问题,而且在应用程序中存在问题。

  1. https://github.com/jamesemcc/depot/blob/master/app/controllers/line_items_controller.rb#L75您应该允许product_id,而不是product。您无法从浏览器传递Product对象。
  2. 您应该从视图和测试
  3. 传递product_id

    祝你好运!