Rspec 错误,在所有模型中创建操作



我的规范/控制器/undertakings_controller_spec.rb如下。

    require 'rails_helper'
    RSpec.describe UndertakingsController, type: :controller do
        describe '#create' do
         let(:undertaking_params) do
           attributes_for(:undertaking)
         end
         it 'increases undertaking by 1' do
              user=create(:user)
              login_user user
              expect{post :create , undertaking: undertaking_params }.to change(Undertaking, :count).by(1)
         end
       end
      end

我删除了此规范文件中的其他操作,因为其他操作的测试有效。和我的控制器/undertakings_controller.rb 在下面。

      class UndertakingsController < ApplicationController
           def create
            @undertaking=current_user.undertakings.build(undertaking_params)
            @undertaking.asking_id=params[:asking_id]
           if @undertaking.save
             flash[:success] = "依頼の申し込みに成功しました。"
             redirect_to @undertaking.asking
           else
            @asking=@undertaking.asking
            render 'askings/show'
          end
        end

和我的模型/承诺.rb在下面。

      class Undertaking < ActiveRecord::Base
        belongs_to :user
        belongs_to :asking
        has_many :comments
        has_one :deciding
        validates :content , presence: true , length: {maximum: 800}
        validates :title , presence: true , length: {maximum: 20}
     end

我的错误如下。

       No route matches {:action=>"create", :controller=>"undertakings", :undertaking=>{:title=>"MyString", :content=>"MyText", :result=>false}}

创建操作的路由如下。

     asking_undertakings POST     /askings/:asking_id/undertakings(.:format)                   undertakings#create

我认为可能是错误导致规范文件中没有:asking_id。但我不明白我应该怎么做。请告诉我。

正如路由中所定义的,创建路径需要asking_id作为参数传递。因此,修改您的 rspec 行从

post :create , undertaking: undertaking_params

post :create, asking_id: <asking-id>, undertaking: undertaking_params

应该工作。

我看到您没有在 rspec 中创建Asking。因此,您首先需要创建一个,然后在post :create调用中传递其 id。

更新

您可以使用工厂女孩在 rspec 中创建Asking对象,前提是您已经为Asking模型定义了工厂。

asking = create(:asking)
post :create, asking_id: asking.id, ...

最新更新