2016-04-03 21 views
0

Denetleyici: payments_controller.rbRSpec Testi JSON için yazılan Raylar

class PaymentsController < ApplicationController 

    # This is needed to have Postman work 
    skip_before_action :verify_authenticity_token 

    rescue_from ActiveRecord::RecordNotFound do |exception| 
    render json: 'not_found', status: :not_found 

    def create 
    new_payment = Payment.new(new_params) 
    current_loan = Loan.find(new_params[:loan_id]) 

    if Payment.valid?(new_payment, current_loan) 
     Payment.received(new_payment, current_loan) 
     current_loan.save 
     new_payment.save 
     redirect_to '/loans' 
    else 
     raise 'Amount entered is above the remaining balance' 
    end 
    end  

end 

Ben Postman içinde test ettiğinde bu yöntem çalışır. Ancak, bunun için bir test yazamıyorum. Şu anda var:

payments_controller_spec.rb

require 'rails_helper' 

RSpec.describe PaymentsController, type: :controller do 

    describe "#create", :type => :request do 
    let!(:loan) {Loan.create!(id: 1, funded_amount: 500.0)} 
    params = '{"payment":{"amount":400, "loan_id":2}}' 

    it 'creates and saves a payment while saving the associated fund_amount of the loan' do 
     post "/payments", params.to_json, {'CONTENT_TYPE' => 'application/json', 'ACCEPT' => 'application/json'} 
     expect(loan.funded_amount).to eql(600.0) 
    end 
    end 
end 

hatadır:

Failure/Error: post "/payments", params.to_json, {'CONTENT_TYPE' => 'application/json', 'ACCEPT' => 'application/json'} 
ActionController::ParameterMissing: 
    param is missing or the value is empty: payment 

Geçerli parametreler (Postman o iş) şunlardır:

{"payment":{"amount":400,"loan_id":2}} 

Herhangi bir yardım olurdu takdir!

describe "#create", :type => :request do 
    let!(:loan) {Loan.create!(id: 1, funded_amount: 500.0)} 

    it 'creates and saves a payment while saving the associated fund_amount of the loan' do 
    json = { :format => 'json', :payment => { :amount => 200.0, :loan_id => 1 } } 
    post '/payments', json 
    loan.reload 
    expect(loan.funded_amount).to eql(300.0) 
    end 
end 
+0

'current_loan = Loan.find (new_params [: loan_id]) u bütün nesne geçen nasıl Payment.valid (new_payment, current_loan) im sadece merak 'ise? – 7urkm3n

cevap

0

Böyle senin params geçirebilirsiniz:

*** GÜNCELLEME ****

Bir süredir bu ile karıştırmasını sonra nihayet bu çalışmayı lazım.

it 'creates and saves a payment while saving the associated fund_amount of the loan' do 
    post "/payments", payment: { amount: 400, loan_id: 1 }, {'CONTENT_TYPE' => 'application/json', 'ACCEPT' => 'application/json'} 
    expect(loan.funded_amount).to eql(600.0) 
end 
+0

Teşekkürler Anthony. Ödemeyi beğenmediğimi sanmıyorum: {miktar: 400, loan_id: 1} tekliflerde bulunmamak. Bu hatayı alıyorum: Desktop/payments_challenge/spec/controllers/payments_controller_spec.rb: 10: sözdizimi hatası, beklenmedik '\ n', bekliyor => (SyntaxError) – user3007294

+0

Hm bunu deneyebilir misiniz? '{payment: {tutar: 400, loan_id: 1}}' –

+0

Hala çalışmıyor: / – user3007294