我的spec / controllers / 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
和我的模特/ 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
我在rails控制台下面通过了线路(即工厂要求)并取得了成功。
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>
当我删除&#39;验证时:deadline_time,presence:true&#39;来自models / ask.rb,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
答案 0 :(得分:0)
您没有将deadline_time
作为asking_params
中允许的参数之一,因此不会在'new'方法中传递它。
尝试将asking_params
更改为...
def asking_params
params.require(:asking).permit(:title, :content , :lang, :person , :sex , :usepoint , :deadline, :deadline_time )
end