2016-12-10 1 views
0

Hallo Jungs, ich habe einen Controller-Code mit dem folgenden:Erwartete Reaktion ein <redirect>, sondern war <200>

class FeedbacksController < ApplicationController 

    def create 
    @feedback = Feedback.create(feedback_params) 

    if @feedback.errors.any? 
     flash[:error] = @feedback.errors 
     render 'new' 
    else 
     redirect_to :back 
    end 

    end 

Test spec

require "rails_helper" 

RSpec.describe FeedbacksController do 

    describe "POST create" do   

    context 'when param[:name] is present' do 
     it 'should redirect to homepage' do 
      @feedback = Feedback.create(:name => "Hah") 
      @feedback.save 
      is_expected.to redirect_to new_feedback_path 
      debugger 
     end 
     end 
    end 
end 

jedoch, wenn ich localhost laufen, wobei der Ausgang ist genau das, was ich will, aber als der Komponententest, es ist nicht vorbei, sondern gibt mich zurück "Erwartete Antwort zu sein war war < 200>."

Darf ich wissen, warum es so ist und wie soll ich meinen Testfall bestehen?

+0

Was ist Ihr Thema? 'Beschreibe" PUT create "' - PUT dient zur Aktualisierung. –

+1

Ich verstehe nicht, wie Sie überhaupt eine 200 Antwort erhalten. Ich sehe in Ihrem Test überhaupt keinen Anruf bei Ihrem Controller. – David

+0

@AlexKojin Ich habe sie erneut bearbeiten. Haha, dass du mir das erzählt hast. – BC2

Antwort

1

Ihnen fehlt die eigentliche Postanforderung an Ihren Controller.

Bitte lesen Sie diese: rspec documentation

So diese:

 @feedback = Feedback.create(:name => "Hah") 
     @feedback.save 

nicht da sein sollte. Die zweite Zeile ist sowieso überflüssig, create speichert das Objekt bereits.

Sie suchen Code wie folgt aussehen:

it 'should redirect to homepage' do 
     post feedback_path, params: { name: 'hah' } 
     expect(response).to redirect_to(new_feedback_path) 
    end 
Verwandte Themen