2014-04-17 4 views
1

모델 생성시 null이 아닌 조건이 발생하지 않습니다. 내 생각에 매개 변수 해시에서 매개 변수를 제거하는 데 강력한 매개 변수가 필요합니다.Rspec 강력한 매개 변수가 매개 변수를 제거하는 중

RSpec에 코드 :

it "creates a new Provider" do 
    expect { 
     post :create, {:admin_provider => {:name => "foo bar"}}, valid_session 
    }.to change(Provider, :count).by(1) 
end 

컨트롤러 코드 :

def create 
    @admin_provider = Provider.new(okay_params) 

    respond_to do |format| 
    ...Render Views 
    end 
end 

def okay_params 
    params.permit(:admin_provider).permit(:name) 
end 

출력 : "이름"매개 변수를 제거하기 위해 내 PARAMS에 무슨 일이 있었는지

Admin::ProvidersController POST create with valid params creates a new Provider 
Failure/Error: post :create, {:admin_provider => {:name => "foo bar"}}, valid_session 
ActiveRecord::StatementInvalid: 
    PG::NotNullViolation: ERROR: null value in column "name" violates not-null constraint 
    DETAIL: Failing row contains (225, null, null, null, t, null, null, null, null, null, null, null, null). 
    : INSERT INTO "providers" DEFAULT VALUES RETURNING "id" 

? 나는 그것을 기호와 문자열로 시도했다. 하드 코딩 대신 let 블록으로 시도했습니다. 차이 없음. 매번 내 매개 변수를 제거하는 것처럼 보입니다. 내가 뭘 놓치고 있니?

+1

'params.require (: admin_provider) .permit (: 이름)' – depa

답변

0

업데이트로 okay_params 정의 :

# app/controllers/providers_controller.rb 

def okay_params 
    params.require(:admin_provider).permit(:name) 
end 

이 그런 다음 사양 :

it "creates a new Provider" do 
    expect { 
     post :create, {:admin_provider => {:name => "foo bar"}}, valid_session 
    }.to change(Provider, :count).by(1) 
end 
+0

당신이 조금 이유 PARAMS를 설명 할 수 .require는 params.permit과 다르게 동작합니다. – ABMagil

+0

@ABMagil, 그들은 두 가지 다른 기능을합니다. 참조하십시오 : http://edgeapi.rubyonrails.org/classes/ActionController/StrongParameters.html – vee

관련 문제