2017-10-29 2 views
0

Ich habe einen Test in RSPEC, die nicht vorbei ist und ich kenne den Grund nicht. Der Test wirft die folgende:Parameter auf meinen Controllern fehlt oder der Wert ist leer

1) SalesmenController POST #create redirect to new team 
    Failure/Error: params.require(:salesmen).permit(:name, :company_id) 

    ActionController::ParameterMissing: 
     param is missing or the value is empty: salesmen 

Der Test ist:

require 'rails_helper' 

RSpec.describe SalesmenController, type: :controller do 
    include Devise::Test::ControllerHelpers 

    before(:each) do 
    @request.env["devise.mapping"] = Devise.mappings[:owner] 
    @current_owner = FactoryGirl.create(:owner) 
    sign_in @current_owner 
    @current_company = FactoryGirl.create(:company, owner: @current_owner) 
    end 

    describe "POST #create" do 
    before(:each) do 
     salesman = create(:salesman, company: @current_company) 
     post :create, params: {:company_id => @current_company.id, company: { name: salesman.name, company_id: @current_company.id } } 
    end 

    it "redirect to new team" do 
     expect(response).to have_http_status(:success) 
    end 

    it "Create team with right attributes" do 
     expect(Salesman.last.company).to eql(@current_company) 
     expect(Salesman.last.name).to eql(@salesman[:name]) 
    end 
    end 
end 

Mein Controller ist:

def create 
    @salesman = Salesman.new(params_salesman) 
    authorize! :create, @salesman 
    if @salesman.save 
     redirect_to company_salesman_path 
     flash[:notice] = "Salesman saved!" 
    else 
     flash.now[:error] = "Could not create salesman!" 
     render :new 
    end 
    end 

private 

    def params_salesman 
    params.require(:salesman).permit(:name, :company_id) 
    end 

Meine Strecken sind:

Rails.application.routes.draw do 
    resources :companies do 
    resources :salesmen 
    resources :goals do 
     resources :days 
    end 
    end 
    devise_for :owners, :controllers => { registrations: 'registrations' } 
end 

Meine Fabrik ist:

FactoryGirl.define tun Fabrik: Verkäufer tun Name {FFaker :: Name.name} Firma Ende Ende

Wer weiß, was passiert sein könnte?

+0

Wo erstellt der Code in der RSpec-Testdatei das Verkäuferobjekt für Ihren Test? Haben Sie einen "Vorher-Tun" -Block oder etwas, wo Sie etwas wie "@current_owner = FactoryGirl.create (: Verkäufer)" oder so etwas haben? –

+0

Ich habe gerade mit dem Rest des Tests bearbeitet. –

+0

sieht so aus, als ob Sie 'FactoryGirl' vor der create-Methode vor dem Block vermissen, sollte es nicht 'salesman = FactoryGirl.create (: Verkäufer, Firma: @current_company)' Funktioniert das? –

Antwort

0

Versuchen Sie params.permit(:name, :company_id) anstelle von params.require(:salesman).permit(:name, :company_id). Grund dafür ist, dass Sie in Ihrer Testumgebung nicht salesman in Ihren Params kommen.

Verwandte Themen