如何使用 RSPEC 测试条带故障案例?



我在支付控制器中有以下端点来完成购买。我正在使用 rspecs 进行测试。对于嘲笑条纹,我正在使用网络模拟宝石。现在我想测试失败案例,即救援条纹::卡错误 => e 部分。我在下面评论了 #Failure 案例。

def create
@cart.user = current_user
customer = Stripe::Customer.create email: stripe_params['sender_email'],
source: stripe_params["card_token"]
Stripe::Charge.create customer: customer.id,
amount: @cart.subtotal,
description: 'Gift Purchase',
currency: 'usd'
render "confirmation"
rescue Stripe::CardError => e
#Failure Case
flash[:alert] = e.message
redirect_to new_payment_path
end

我的 rspecs 测试用例如下所示。首先,我正在存根条纹使用的 Web 请求。我应该如何存根请求,以便条带抛出条纹::CardError 异常并执行失败分支。希望我已经把问题说清楚了。我感谢任何帮助。谢谢!

context "invalid purchases" do 
it "card error" do
stub_request(:post, "https://api.stripe.com/v1/customers").
with(
body: {"email"=>"asd@asd.com"},
headers: {
'Accept'=>'*/*',
'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3',
'Authorization'=>'Bearer sk_test_UEBAIinq8viQ875czrsC18ZX',
'Content-Type'=>'application/x-www-form-urlencoded',
'User-Agent'=>'Stripe/v1 RubyBindings/3.17.0',
'X-Stripe-Client-User-Agent'=>'{"bindings_version":"3.17.0","lang":"ruby","lang_version":"2.3.4 p301 (2017-03-30)","platform":"x86_64-linux","engine":"ruby","publisher":"stripe","uname":"Linux version 4.9.120-c9 (root@b1cff69ce3c3) (gcc version 8.2.0 (Debian 8.2.0-4) ) #1 SMP Wed Aug 15 22:48:26 UTC 2018","hostname":"kofhearts-ktmbasket-6224565"}'
}).
to_return(status: 200, body: {id: 1}.to_json, headers: {})


stub_request(:post, "https://api.stripe.com/v1/charges").
with(
body: {"amount"=>"123", "currency"=>"usd", "customer"=>"1", "description"=>"Gift Purchase"},
headers: {
'Accept'=>'*/*',
'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3',
'Authorization'=>'Bearer sk_test_UEBAIinq8viQ875czrsC18ZX',
'Content-Type'=>'application/x-www-form-urlencoded',
'User-Agent'=>'Stripe/v1 RubyBindings/3.17.0',
'X-Stripe-Client-User-Agent'=>'{"bindings_version":"3.17.0","lang":"ruby","lang_version":"2.3.4 p301 (2017-03-30)","platform":"x86_64-linux","engine":"ruby","publisher":"stripe","uname":"Linux version 4.9.120-c9 (root@b1cff69ce3c3) (gcc version 8.2.0 (Debian 8.2.0-4) ) #1 SMP Wed Aug 15 22:48:26 UTC 2018","hostname":"kofhearts-ktmbasket-6224565"}'
}).
to_return(status: 200, body: {id: 1}.to_json, headers: {})

visit root_path
expect(page).to have_content('teddy')
click_button('Add to Basket')
expect(page).to have_content('Your Basket')
click_link('Checkout')
click_link('Guest Checkout')
find('label', :text => 'Credit Card').click
fill_in 'card_number', with: '4242424242424242'
fill_in 'card_verification', with: '123'
fill_in 'exp_month', with: '12'
fill_in 'exp_year', with: '19'
click_button('Submit')

end
end

对于模拟卡片错误,您可以在此处找到更多示例

it "mocks a declined card error" do
# Prepares an error for the next create charge request
StripeMock.prepare_card_error(:card_declined)
expect { Stripe::Charge.create(amount: 1, currency: 'usd') }.to raise_error {|e|
expect(e).to be_a Stripe::CardError
expect(e.http_status).to eq(402)
expect(e.code).to eq('card_declined')
}
end

相关内容

  • 没有找到相关文章

最新更新