Rspec 错误,在创建操作中



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

    require 'rails_helper'
    RSpec.describe AskingsController, type: :controller do
     describe'Post #create' do
      before do
          @user=create(:user)
          login_user(@user)
      end
      let(:asking_params)  do
          attributes_for(:asking)
      end
      it 'should make askings +1' do
          expect{post :create, asking: asking_params}.to change(Asking, :count).by(1)
      end
      it 'create response' do
        post :create, asking: asking_params
        expect(response).to redirect_to(assigns(:asking))
      end
     end

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

 # == Schema Information
 #
 # Table name: askings
 #
 #  id            :integer          not null, primary key
 #  content       :text
 #  lang          :string
 #  usepoint      :integer
 #  finished      :boolean
 #  person        :string
 #  sex           :string
 #  title         :string
 #  deadline      :date
 #  deadline_time :integer
 #  user_id       :integer
 #  created_at    :datetime         not null
 #  updated_at    :datetime         not null
require 'time'
class Asking < ActiveRecord::Base
  belongs_to :user
  has_many :undertakings , dependent: :destroy    
  has_one :deciding
  validates :title , presence: true , length: {maximum: 80}
  validates :content , presence: true , length: {maximum: 800}
  validates :lang , presence: true
  validates :usepoint , presence: true
  validates :person , presence: true
  validates :sex , presence: true
  validates :deadline , presence: true
  validates :deadline_time , presence: true
 end

和我的rspec/factories/askings.rb在下面。

   FactoryGirl.define do
    factory :asking do
      association :user
      title "MyString"
      content "お願いします"
      lang "english"
      person 'ネイティブ限定'
      sex '男性限定'
      usepoint 1
      finished false    
      deadline "2017-1-12"
      deadline_time 1
     end
    end

我在rails控制台中通过了下面的行(即询问工厂),它成功了。

     Asking.create!(:title=>"MyString", :content=>"お願いします", :lang=>"english", :person=>"ネイティブ限定", :sex=>"男性限定", :usepoint=>1, :finished=>false, :deadline=>"2017-1-12", :deadline_time=>1)

但是我在 rspec/控制器中有错误。

     expected #count to have changed by 1, but was changed by 0

及以下。

     Expected response to be a <redirect>, but was <200>

当我从models/asking.rb中删除"验证:d eadline_time,状态:true"时,rspec没有错误。所以我认为错误导致deadline_time。但是在Rails控制台中它可以工作。为什么我有这样的错误?请帮助我。

我的askings_controller.rb在下面。

      require 'time'
      class AskingsController < ApplicationController
       before_action :authenticate_user! , only: [:new , :create , :destroy] 
       def create
         @asking=Asking.new(asking_params)  do |c|
             c.user=current_user
         end
         if @asking.save
           flash[:success] = "依頼に成功しました。"
           redirect_to @asking
         else
           render 'askings/new'
         end
       end
         private   
          def asking_params
            params.require(:asking).permit(:title, :content , :lang, :person , :sex , :usepoint , :deadline )
          end
     end

您没有deadline_time作为asking_params中允许的参数之一,因此它不会在"new"方法中传递。

尝试将asking_params更改为...

def asking_params
  params.require(:asking).permit(:title, :content , :lang, :person , :sex , :usepoint , :deadline, :deadline_time )
end

相关内容

最新更新