You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确测试创建Stripe customer的API?stripe-ruby-mock该如何使用?

第一步:安装依赖
  • 在Gemfile的test分组下添加如下配置,之后执行bundle install安装即可
group :test do
  gem 'stripe-ruby-mock', require: 'stripe_mock'
end
第二步:编写测试用例(以下以Rails常用的RSpec框架为例,MiniTest思路完全一致)

stripe-ruby-mock的核心原理是拦截所有发往Stripe官方的请求,在本地模拟Stripe的返回逻辑,不需要真实调用接口也不需要联网。

完整的controller测试代码示例如下:

require 'rails_helper'
require 'stripe_mock'

RSpec.describe UsersController, type: :controller do
  # 每个测试用例运行前开启stripe mock,运行后清空状态避免用例互相干扰
  before { StripeMock.start }
  after { StripeMock.stop }

  describe 'POST #create' do
    let(:valid_params) do
      {
        email: 'test@example.com',
        first_name: '张',
        last_name: '三'
      }
    end

    context '参数合法且Stripe调用成功' do
      it '成功创建用户并绑定stripe customer id' do
        post :create, params: valid_params

        # 断言接口返回正常
        expect(response).to have_http_status(:ok)
        json = JSON.parse(response.body)
        expect(json.dig('user', 'email')).to eq(valid_params[:email])

        # 断言数据库用户数据正确
        user = User.last
        expect(user.email).to eq(valid_params[:email])
        expect(user.stripe_customer_id).to be_present

        # 断言模拟的Stripe侧确实创建了对应信息的客户
        stripe_customer = Stripe::Customer.retrieve(user.stripe_customer_id)
        expect(stripe_customer.email).to eq(valid_params[:email])
        expect(stripe_customer.name).to eq('张 三')
      end
    end

    context 'Stripe调用异常时' do
      it '验证异常分支逻辑' do
        # 模拟Stripe返回参数错误异常
        StripeMock.prepare_error(Stripe::InvalidRequestError.new('参数错误', :email), :create_customer)

        expect {
          post :create, params: valid_params
        }.not_to change(User, :count)
        # 这里也可以加断言接口返回错误状态码,你当前的controller代码没有做异常捕获,这个用例如果跑失败,可以提醒你补充事务/异常处理逻辑,避免出现用户创建成功但Stripe绑定失败的脏数据
      end
    end
  end
end
补充说明

你当前的controller实现存在数据一致性风险:如果Stripe::Customer.create调用失败,前面已经创建的User不会自动回滚,会产生没有绑定stripe_customer_id的无效用户。建议将两个操作放在同一个事务里,或者先调用Stripe接口成功后再创建用户。


内容的提问来源于stack exchange,提问作者Remy Wang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 18:15:04