2016-11-19 2 views
0

Ich versuche, Feature-Tests für meine RoR-App zu schreiben, wo Benutzer bezahlen müssen, um einen Beitrag einzureichen. Die Benutzerreise ist;Rails, Stripe-Feature-Test Fehler - Parameter fehlt oder der Wert ist leer: Gebühr

  1. Der Benutzer erstellt einen Beitrag und wählt die Schaltfläche ‚fortfahren Zahlung‘
  2. Benutzer dann zu einer Abrechnungsseite weitergeleitet, wo sie in ‚Kartennummer‘ ‚Kartenprüfung‘ und ‚Karte Ablauf‘ füllen kann, Benutzer dann drückt die Schaltfläche "Bezahlen". Die Zahlung wird von Stripe bearbeitet. Es ist nicht das Popup-Widget, sondern ein benutzerdefiniertes Formular.
  3. Wenn dies gelingt, wird der Benutzer auf ihre Live-Post umgeleitet

Ich habe ein Post-Modell und ein Ladungsmodell. Post hat eine Gebühr. Ladung gehört_zum Posten. Die Zahlungen sind einmalige Zahlungen, keine Abonnements.

My Post Controller (erstellen Aktion nur):

def create 
    @post = Post.new(post_params) 
    @post.user = current_user 
    @amount = 500 
    if @post.save 
    redirect_to new_post_charge_path(@post.id) 
    else 
    flash[:error] = "There was an error saving the post. Please try again." 
    render :new 
    end 
end 

Meine Laderegler (create Aktion nur):

def create 
    @charge = Charge.new(charge_params) 
    @post = Post.find(params[:post_id]); 
    @charge.post = @post 

    if @charge.save 
     Stripe::Charge.create(
     :amount => 500, 
     :currency => "gbp", 
     :source => params[:charge][:token], 
     :description => "Wikipost #{@post.id}, #{current_user.email}", 
     :receipt_email => current_user.email 
    ) 
     @post.stripe_card_token = @charge.stripe 
     @post.live = true 
     @post.save 

     redirect_to @post, notice: 'Post published successfully' 
    else 
     redirect_to new_post_charge_path(@post.id) 
    end 

    rescue Stripe::CardError => e 
     flash[:error] = e.message 
     return redirect_to new_post_charge_path(@post.id) 
    end 

-I-Tests sind mit rspec/Capybara und ich versucht, eine Funktion zu schreiben Test wie unten, aber ich bekomme den Fehler 'param fehlt oder der Wert ist leer: Ladung';

Was ist der beste Weg, um den Fehler zu beheben oder einen Test für diese Benutzerreise zu schreiben?

Antwort

1

Es klingt, als wären die Stripe-Anmeldeinformationen in der Testumgebung nicht konfiguriert. Vielleicht möchten Sie auch den Edelstein fake_stripe untersuchen, damit Ihre Tests nicht auf Stripeserver umgeleitet werden müssen.

Zusätzlich expect(current_path).to eq('/posts/new') sollte als

expect(page).to have_current_path('/posts/new') 

geschrieben werden, die die Warteverhalten verwendet werden können, wenn für den neuen Pfad Überprüfung und Test flakiness reduzieren.

Verwandte Themen