2017-01-03 49 views
0

我的規格/ controllers/askings_spec.rb在下面。Rspec錯誤,在創建操作中

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 

和My models/ask.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 

我通過在軌控制檯下方的線(也就是問工廠),它的成功。

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

但我在rspec/controllers中有錯誤。

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

及以下。

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

當我從models/asking.rb中刪除'validates:deadline_time,presence:true'時,rspec沒有錯誤。所以我認爲錯誤會導致deadline_time。但在軌道控制檯它的作品。爲什麼我有這樣的錯誤?請幫幫我。

and My askings_controller.rb is below。

 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 
+0

請張貼控制器代碼。 – 31piy

+0

對不起,我添加了控制器代碼。 –

回答

0

您不必deadline_timeasking_params所以它沒有被在「新」的方法傳遞所允許的參數之一。

嘗試改變asking_params到...

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

哦,謝謝,它的工作原理!我完全忽略了它。 –