次のrspecテストがあります:
def valid_attributes
{ "product_id" => "1" }
end
describe "POST create" do
describe "with valid params" do
it "creates a new LineItem" do
expect {
post :create, {:line_item => valid_attributes}, valid_session #my valid_session is blank
}.to change(LineItem, :count).by(1)
end
このエラーで失敗します:
1) LineItemsController POST create with valid params redirects to the created line_item
Failure/Error: post :create, {:line_item => valid_attributes}, valid_session
ActiveRecord::RecordNotFound:
Couldn't find Product without an ID
# ./app/controllers/line_items_controller.rb:44:in `create'
# ./spec/controllers/line_items_controller_spec.rb:87:in `block (4 levels) in <top (required)>'
これは私のコントローラーの作成アクションです:
def create
@cart = current_cart
product = Product.find(params[:product_id])
@line_item = @cart.line_items.build(:product => product)
respond_to do |format|
if @line_item.save
format.html { redirect_to @line_item.cart, notice: 'Line item was successfully created.' }
format.json { render json: @line_item.cart, status: :created, location: @line_item }
else
format.html { render action: "new" }
format.json { render json: @line_item.errors, status: :unprocessable_entity }
end
end
end
ご覧のとおり、私のアクションはリクエストのparams
オブジェクトから product_id を期待しています。 この product_id を rspec テストに組み込むにはどうすればよいですか?
私はこのbefore
ステートメントを配置しようとしました:
before(:each) do
ApplicationController.any_instance.stub(:product).and_return(@product = mock('product'))
end
. . . しかし、それは何も変わりません。ここのどこかにrspecの概念がありません。