[英]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.