繁体   English   中英

RSpec controller 测试无法获取 id 参数。 我不知道如何解决这个问题

[英]RSpec controller test can't get id params. I don't know how to fix this

嗨,我现在正在通过 rspec 为 rails 应用程序进行测试。 我不知道要解决这个问题。 在下面。 任何人都可以解决这个问题?

1) Items::AddToBasketsController Post #create succuss
     Failure/Error: @item = Item.find(params[:item_id])
     
     ActiveRecord::RecordNotFound:
       Couldn't find Item with 'id'=category=nigiri&discription=test+test&img=%23%3CFile%3A0x00007fc54e9bfc38%3E&name=test1&price=301
     # ./app/controllers/items/add_to_baskets_controller.rb:4:in `create'
     # ./spec/controller/add_to_baskets_controller_spec.rb:43:in `block (4 levels) in <top (required)>'
     # ./spec/controller/add_to_baskets_controller_spec.rb:42:in `block (3 levels) in <top (required)>'

add_to_baskets_controller_spec.rb

require 'rails_helper'


RSpec.describe Items::AddToBasketsController, type: :controller do 
  let(:user) { create(:user) }
  let(:admin) { create(:admin) }
  let(:first_item)  { create(:first_item, admin_id: admin.id) }
  let(:item_params) { attributes_for(:first_item) }
  
  before do 
    login_user
  end
  
  describe "Post #create" do 
    it "succuss" do
      basket = user.prepare_basket
      expect do
        post :create, params: { item_id: FactoryBot.attributes_for(:first_item) }
      end.to change(basket.basket_items, :count).by(1)
    end
  end
end

add_to_baskets_controller.rb

class Items::AddToBasketsController < Items::ApplicationController
  def create
    basket = current_user.prepare_basket
    @item = Item.find(params[:item_id])
    basket.basket_items.create!(item_id: @item.id)
    flash[:success] = "your item in basket"
    redirect_to baskets_path
  end
end

在线上:

post :create, params: { item_id: FactoryBot.attributes_for(:first_item) }

你说参数item_id应该是FactoryBot.attributes_for(:first_item) ,这是一个 hash 具有first_item的所有属性。

此外,要获取 ID,您需要首先创建 object。 换句话说:

item_id: FactoryBot.create(:first_item).id

或者简单地说,使用你的let

item_id: first_item.id

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM