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?
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? –
Ich habe gerade mit dem Rest des Tests bearbeitet. –
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? –