2017-01-03 51 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

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