Laravel Касса - Юнит-тесты с созданием подписок с методами оплаты - PullRequest
0 голосов
/ 25 февраля 2020

Глядя вглубь этого, я не уверен, что это даже возможно, и это позор, потому что я пытаюсь выучить 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 показано, как отправить токен через Stripe. js, но это не работает для модульного тестирования.

Я попытался включить библиотеку Stripe напрямую и создать объект PaymentMethod, но для этого также необходимо вручную установить ключ API. Теперь ошибка, которую я получаю, заключается в том, что мне нужно подтвердить свой номер телефона, чтобы отправить необработанные номера кредитных карт в API полосы.

Я надеюсь, что есть лучший способ. Как я могу использовать Laravel Кассу TDD способом и макетировать поддельные подписки с поддельными способами оплаты?

Ответы [ 2 ]

0 голосов
/ 03 мая 2020

Stripe предоставляет не только номера тестовых карточек, но и токены и способы оплаты.

https://stripe.com/docs/testing#cards

Откройте вкладку PaymentMethods. Значение (например, 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();

    }

Ваши тесты могут отличаться, но вы можете сделать обычный запрос к контроллеру биллинга с помощью этих тестовых способов оплаты, и он будет выполнен так же, как если бы вы делали это на клиентской стороне.

0 голосов
/ 25 февраля 2020

Вы можете использовать stripe-mock для насмешки во время тестов. Если это не соответствует вашим потребностям, насмешка над объектами напрямую может быть лучшим вариантом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...