2016-11-19 3 views
0

Я пытаюсь написать функциональные тесты для своего приложения RoR, где пользователи должны платить за отправку сообщения. Поездка пользователя;Ошибка Rails, ошибка функции полосы - параметр отсутствует или значение пуст: плата

  1. Пользователя создает сообщение и нажимает кнопку «перейти к оплате»
  2. Пользователь затем доставлен в платежной странице, где они могут заполнить «номер карты» «проверку карты» и «истечение срока действия карты», пользователь затем нажмите кнопку «платить». Платеж обрабатывается Stripe. Это не всплывающий виджет, а настраиваемая форма.
  3. В случае успеха, пользователь перенаправляется на их живой пост

У меня есть пост модель и модель заряда. Сообщение has_one charge. Заряд принадлежит к сообщению. Платежи - разовые платежи, а не подписки.

Мои сообщения Controller (создавать только действие):

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 

My Charge Controller (создавать только действие):

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 

Я тестирование с RSpec/водосвинки и пытаюсь написать функцию тест, как показано ниже, но я все время получаю ошибку «Параметр отсутствует или значение пуст: charge»;

require 'rails_helper' 

feature 'Publish post' do 

    before do 
    @user = create(:user) 
    end 

    scenario 'successfully as a registered user', :js => true do 
    sign_in_as(@user) 
    click_link 'New post' 

    expect(current_path).to eq('/posts/new') 
    fill_in 'post_title', with: 'My new post' 
    fill_in 'textarea1', with: 'Ipsum lorem.....' 

    click_button 'Proceed to Payment' 

    expect(page).to have_content('Billing') 

    within 'form#new_charge' do 
     fill_card_details 
     click_button 'Proceed to Payment' 
    end 

    expect(page).to have_content('My new post - published') 
    end 

Каков наилучший способ устранить ошибку или написать отзыв для этого пользователя?

ответ

1

Похоже, что учетные данные Stripe не настроены в тестовой среде. Вы также можете посмотреть на использование драгоценного камня fake_stripe, чтобы ваши тесты не нуждались в кругообороте на полосы серверов.

Кроме того expect(current_path).to eq('/posts/new') должен быть записан в виде

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

, который позволит поведение ожидания, которые будут использоваться при проверке на новый путь и уменьшит тест шелушение.

 Смежные вопросы

  • Нет связанных вопросов^_^