WebMock返回Hash语法问题:Rails控制器Stub响应体配置报错
解决WebMock Stub Stripe PaymentIntent.create的返回体配置问题
正确配置步骤
构造符合Stripe格式的Ruby哈希
把Stripe返回的null对应成Ruby的nil,比如目标响应的哈希示例:stub_response = { id: "pi_123456789", client_secret: "pi_123456789_secret_abcdef", status: "succeeded", some_null_field: nil # 对应Stripe返回的null }转JSON字符串并设置响应头
WebMock要求返回体为字符串,同时必须指定Content-Type为application/json,否则Stripe SDK无法正确解析响应,会出现“Stub无返回”的假象。完整Stub代码如下:stub_request(:post, "https://api.stripe.com/v1/payment_intents") .with( headers: { "Authorization" => "Bearer #{ENV['STRIPE_SECRET_KEY']}", "Content-Type" => "application/x-www-form-urlencoded" } ) .to_return( status: 200, body: stub_response.to_json, headers: { "Content-Type" => "application/json" } )
常见问题排查
- 直接用哈希当返回体:WebMock不支持,必须转成JSON字符串
- 转JSON但未设置
Content-Type:Stripe SDK无法解析响应,导致控制器无法获取正确的client_secret,看似Stub未生效 - 手动写
null:Ruby会将其识别为变量,触发NameError,需用Ruby的nil替代,to_json会自动转为JSON的null
内容的提问来源于stack exchange,提问作者Jerome
相关产品推荐
相关产品推荐

