2016-11-19 29 views
0

我正在尝试为我的RoR应用编写功能测试,用户必须付费才能提交帖子。用户旅程是;Rails,条纹功能测试错误 - param丢失或值为空:charge

  1. 用户创建一个职位并选择按钮“继续支付”
  2. 用户,然后带到结算页面,在这里他们可以在“卡号”“卡验证”和“卡有效期”,用户填写然后按下“付款”按钮。付款由Stripe处理。它不是弹出窗口小部件,而是自定义窗体。
  3. 如果成功的话,将用户重定向到他们的现场后

我有一个桩模型和充电模式。邮寄已收到费用。费用属于发布。付款是一次性付款,而不是订阅。

我的帖子控制器(仅创建行动):

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 

我的充电控制器(仅适用于创建操作):

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 /水豚测试,我试图写一个特征像下面的测试,但我不断收到错误“参数丢失或值是空的:收费';

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

这听起来像条纹证书没有在测试环境中配置。您也可能想使用fake_stripe宝石,以便您的测试不必往返条纹服务器。

此外expect(current_path).to eq('/posts/new')应该写成

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

检查新的路径时,将降低测试成片,这将允许使用等待行为。

相关问题