2017-03-17 4 views
0

J'essaie de corriger certains tests que j'ai écrits dans mon contrôleur de commentaires. A partir de maintenant, avec mes tests actuels je reçois cette erreur:Rspec Créer un post avec des paramètres imbriqués

Failure/Error: @outlet = Outlet.find(params[:comment][:outlet_id]) 

ActiveRecord::RecordNotFound: 
    Couldn't find Outlet with 'id'= 

Voici un exemple de certains des tests

describe '#create' do 
    context 'with valid attributes' do 
     before :each do 
      @outlet = FactoryGirl.create(:outlet) 
      @user = FactoryGirl.create(:user) 
      @comment_params = FactoryGirl.attributes_for(:comment) 
     end 

     let(:create) { post :create, params: { outlet_id: @outlet.id, user_id: @user.id, comment: @comment_params } } 

     it "creates new comment" do 
      expect { create }.to change { Comment.count }.by(1) 
     end 

     it "increases the post comment count by 1" do 
      expect { create }.to change { @outlet.comments.count }.by(1) 
     end 

     it "increases user comment count by 1" do 
      expect { create }.to change { @user.comments.count }.by(1) 
     end 
    end 
end 

Je suis sûr que ce qui se passe à cause de ma create dans mes tests

let(:create) { post :create, params: { outlet_id: @outlet.id, user_id: @user.id, comment: @comment_params } } 

Voici mon contrôleur commentaires créer une action

def create 
    @outlet = Outlet.find(params[:comment][:outlet_id]) 
    @comment = @outlet.comments.build(comment_params) 
    @comment.user_id = current_user.id 


    if @comment.save 
     redirect_to(@outlet) 
    end 
end 

Je suis à peu près sûr que cela ne fonctionne pas, car l'ID de sortie qu'il recherche est un paramètre imbriqué dans le paramètre comments. Comment réparer mon test rspec pour qu'il recherche un paramètre imbriqué?

+0

mis à jour avec exmaples de test –

Répondre

2

Il suffit de passer votre params comme arguments à l'appel post, nichant au besoin, par exemple .:

post :create, user_id: @user.id, comment: { outlet_id: @outlet.id }