Jak používat Laravel Dusk k testování Stripe (Cashier)

Nemohl jsem najít nikoho popisujícího, jak to udělat. Pokud existuje lepší způsob nebo zdroj, dejte mi prosím vědět.

Nezapomeňte si přečíst varování ve spodní části příspěvku.

Stripe.js nebo Stripe v2

Toto je starší zastaralá metoda, ale stále ji používá řada webů.

Nejprve rychlý přehled o tom, co se stane, abychom lépe porozuměli výzvě testování. Po kliknutí na tlačítko platby se v horní části obrazovky překryje prvek iframe. Uvnitř tohoto rámce je způsob platby. Po provedení platby rám zmizí.

Musíme tedy kliknout na tlačítko platby, přesunout se do prvku iframe Stripe, zadat informace o platbě a různých platbách, kliknout na tlačítko pay, počkat na jeho zpracování a pak rámeček opustit.

V tomto příkladu jsem použil tento kód k vytvoření tlačítka a modální:

Což vytváří toto tlačítko:

A tento způsob:

Zadávání PSČ je povoleno, ale nezobrazí se, dokud nezačnete zadávat číslo kreditní karty. Což je další výzva.

Zde je test:

Důležité části:

Počkejte, až se otevře překryvná vrstva iframe:

-> waitFor ('iframe [name = stripe_checkout_app]')

Přepněte na používání tohoto prvku iframe:

$ browser-> driver-> switchTo () -> frame ('stripe_checkout_app');

Počkejte, až odejde iframe:

-> waitUntilMissing ('iframe [name = stripe_checkout_app]')

Poznámka: Mám s tím největší problémy. Neustále selhává, protože to chvíli trvá POST a pak odejde. Nezapomeňte, že budete muset přidat další zpoždění, pokud máte problémy

Přejít zpět na výchozí:

$ browser-> driver-> switchTo () -> defaultContent ();

Poznámka: Tato část není nutná, pokud nemáte další testy, které chcete spustit poté, co to Stripe udělá.

Možná se ptáte na pole, proč jsem použil zástupný symbol jako selektor? Podívejme se na můj příklad pole Kreditní karta

Všimněte si skutečného vstupního prvku:

ID je náhodné pole. Také zde není jméno. Hádám, že to má zastavit takové věci. Použití zástupného symbolu je tedy jediná věc, která se zdá být použitelná. Tento test je však velmi křehký.

Stripe v3 nebo Stripe Elements

Pro tento příklad jsem použil kód Stripe má Příklad 3 na jejich rychlé úvodní stránce.

Poskytuje záznam, který vypadá takto:

Nejprve rychlý přehled o tom, co se stane, abychom lépe porozuměli výzvě testování. Když se stránka načte, je načten prvek iframe přes prvek nebo prvky, které máte, se vstupními prvky vstupu kreditní karty.

Takže v příkladu:

Vymění se se vstupem karty, který vidíte ve snímku obrazovky.

Problém je v tom, že vzhledem k tomu, že je na jiném snímku, je to trochu složitější. Abychom otestovali, musíme čekat, až se tyto prvky načtou, vyplňte všechny ostatní informace, přejděte do prvku iframe Stripe, vyplňte prvky kreditní karty, odejděte a vraťte se zpět do hlavního okna a klikněte na tlačítko pay a nakonec počkat na to proces.

Zde je test soumraku, který jsem použil:

Zde jsou důležité části:

Počkejte na načtení proužkových prvků:

-> waitFor ('iframe [name = __ privateStripeFrame3]')

Změňte iframe Stripe:

$ browser-> driver-> switchTo () -> frame ('__ privateStripeFrame3');

Přejít zpět na výchozí:

$ browser-> driver-> switchTo () -> defaultContent ();

Mějte na paměti, že tyto prvky se mohou velmi lišit podle toho, co jste použili. To by však mělo stačit, abyste mohli začít. Opravdu nejdůležitější část bude věnována prvku iframe a zpět.

Vyčištění

Po dokončení testu se Ben Wrigley zeptá, jak odstranit uživatele z Stripe.

Nebudete to moci udělat během tearDown (), protože potřebujete uživatele. Takže to bude muset být na konci samotné zkoušky

// Smazat předplatné
$ user-> subscription () -> delete ();
// Odstraňte zákazníka z Proudu
\ Stripe \ Stripe :: setApiKey (\ Config :: get ('services.stripe.secret'));
\ Stripe \ Customer :: načíst ($ user-> stripe_id) -> delete ();

Poznámka: Spuštění posledního bitu může trvat několik sekund.

Varování

Tyto testy jsou velmi křehké. Stačí Stripe, aby se něco přejmenovalo a vaše Duskovy testy přestanou fungovat.

Při několika příležitostech jsem měl iframe plně načten a test selhal. Zdá se to vzácné, ale něco, o čem je třeba vědět.

Nakonec se zdá, že se Stripe to nelíbí a občas postaví ověřovací stránku, která prokáže, že jste člověk. Narazil jsem na to jen jednou, takže nevím, co to spouští. To by samozřejmě mohlo být velmi problematické.

Tady máš. Testování Laravel Cashier Stripe pomocí Laravel Dusk.

Nepoužil jsem Braintree, nicméně bych si představil, že by použil podobnou metodu.

Pokud máte nějaké lepší nápady nebo komentáře, dejte mi vědět níže nebo na Twitteru.

Jako vždy děkuji Taylor Otwell