Laravel 收银员 - 使用付款方式创建订阅的单元测试
Laravel Cashier - Unit Tests with creating subscriptions with payment methods
深入了解这一点,我不确定它是否可行,这很遗憾,因为我正在尝试学习 TDD。
我想测试我的模型 Billable
正在创建并订阅一个计划。
/** @test */
public function an_account_can_subscribe_to_a_plan() {
$account = factory("App\Account")->create();
Stripe::setApiKey('key');
$paymentMethod = PaymentMethod::create([
'type' => 'card',
'card' => [
'number' => '4242424242424242',
'exp_month' => '2',
'exp_year' => '2021',
'cvc' => '314'
]
]);
$subscription = $account->newSubscription('default', 'starter')->create($paymentMethod);
$this->assertTrue( $subscription->valid() );
}
Laravel Cashier 文档展示了如何通过 Stripe.js 发送令牌,但这不适用于单元测试。
我尝试直接包含 Stripe 库并创建一个 PaymentMethod
对象,但这也需要我手动设置一个 API 键。现在我得到的错误是我必须验证我的 phone 号码才能将原始信用卡号码发送到条带 API.
我希望有更好的方法。我如何以 TDD 方式使用 Laravel Cashier 并使用虚假支付方式模拟虚假订阅?
您可能想使用 stripe-mock for mocking during tests. If that doesn't fit your needs, mocking the objects directly 可能是更好的选择。
Stripe 不仅提供测试卡号,还提供令牌和支付方式。
https://stripe.com/docs/testing#cards
单击付款方式选项卡。该值(例如 pm_card_visa
)可以在您的测试中直接在服务器端使用,无需前端支付意图实现。
这是我进行的功能测试示例:
/**
* @test
*/
public function a_user_can_subscribe_to_a_paid_plan()
{
$this->actingAs($this->user);
$this->setUpBilling();
$enterprise = Plan::where('name', 'Enterprise')->first()->stripe_plan_id;
$response = $this->post(route('paywall.payment'), [
'payment_method' => 'pm_card_visa',
'stripe_plan_id' => $enterprise
])
->assertSessionDoesntHaveErrors()
->assertRedirect();
}
您的测试可能会有所不同,但您可以使用这些测试付款方式向您的计费控制器发出正常请求,它会像在前端执行一样通过。
深入了解这一点,我不确定它是否可行,这很遗憾,因为我正在尝试学习 TDD。
我想测试我的模型 Billable
正在创建并订阅一个计划。
/** @test */
public function an_account_can_subscribe_to_a_plan() {
$account = factory("App\Account")->create();
Stripe::setApiKey('key');
$paymentMethod = PaymentMethod::create([
'type' => 'card',
'card' => [
'number' => '4242424242424242',
'exp_month' => '2',
'exp_year' => '2021',
'cvc' => '314'
]
]);
$subscription = $account->newSubscription('default', 'starter')->create($paymentMethod);
$this->assertTrue( $subscription->valid() );
}
Laravel Cashier 文档展示了如何通过 Stripe.js 发送令牌,但这不适用于单元测试。
我尝试直接包含 Stripe 库并创建一个 PaymentMethod
对象,但这也需要我手动设置一个 API 键。现在我得到的错误是我必须验证我的 phone 号码才能将原始信用卡号码发送到条带 API.
我希望有更好的方法。我如何以 TDD 方式使用 Laravel Cashier 并使用虚假支付方式模拟虚假订阅?
您可能想使用 stripe-mock for mocking during tests. If that doesn't fit your needs, mocking the objects directly 可能是更好的选择。
Stripe 不仅提供测试卡号,还提供令牌和支付方式。
https://stripe.com/docs/testing#cards
单击付款方式选项卡。该值(例如 pm_card_visa
)可以在您的测试中直接在服务器端使用,无需前端支付意图实现。
这是我进行的功能测试示例:
/**
* @test
*/
public function a_user_can_subscribe_to_a_paid_plan()
{
$this->actingAs($this->user);
$this->setUpBilling();
$enterprise = Plan::where('name', 'Enterprise')->first()->stripe_plan_id;
$response = $this->post(route('paywall.payment'), [
'payment_method' => 'pm_card_visa',
'stripe_plan_id' => $enterprise
])
->assertSessionDoesntHaveErrors()
->assertRedirect();
}
您的测试可能会有所不同,但您可以使用这些测试付款方式向您的计费控制器发出正常请求,它会像在前端执行一样通过。