Тестирование приложения неотъемлемая часть процесса правильной разработки программного продукта. Сегодня расскажу как легко можно написать тест оформления заказа. Проект, на котором нужно было написать тест, довольной сложный: фронт на Vue , бек на Laravel .
Юнит тест для оформления заказа можно было выполнить на уровне контроллеров, но тогда ошибки возникающие на фронте не отловишь. Поэтому было решено использовать так называемый регрессионное тестирование.
Для этой задачи прекрасно подойдет Laravel Dusk . Устанавливает сие дело очень просто. Переходите по ссылке для установки: https://laravel.su/docs/8.x/dusk
Для создания класса тестирования пишем:
php artisan dusk:make CheckoutTest
Теперь давайте подумаем, как происходит оформление заказа. Очевидно, нужно открыть товар, положить в корзину, перейти на страницу оформления заказа. Заполнить форму и получить какой то ответ, лучше конечно, если ответ об успешном заказе.
<?php namespace Tests\Browser; use Illuminate\Foundation\Testing\DatabaseMigrations; use Laravel\Dusk\Browser; use Tests\DuskTestCase; class CheckoutTest extends DuskTestCase { /** * A Dusk test example. * * @return void */ public function testNotRegistredUser() { $this->browse(function (Browser $browser) { $browser //Открываем товар! ->visit('/product/praim-dent-prime-dent-hybrid-composite-visible-light-cure-gibridnyi-svetovoi-kompozit-nabor-7-spr') ->screenshot('checkout-1') //ждем 5 секунд. Чтоб данные обновились ->pause(5000) //Кликаем по кнопке чтоб положить в корзину ->click('.bhButton') ->pause(5000) ->screenshot('checkout-2') //Переходим на страницу оплаты ->visit('/account/shopping-cart?ordering=true') ->pause(5000) ->screenshot('checkout-3') //Нахимаем на оформить заказ, вызывая ошибку валидации.Нужно ввести данные ->press('Оформить заказ') ->pause(2000) ->screenshot('checkout-4') ->pause(1000) //Ввводим данные в формы ->type('#input-315', 'Testov') ->type('#input-318', '89170000001') ->type('#input-321', 'test@mail.net') //Нахимаем на оформить заказ, вызывая ошибку валидации.Нужно ввести адрес ->press('Оформить заказ') ->screenshot('checkout-5') //Город .Во всплывающем окне выбираем из списка первый элемент ->type('#input-288', 'Казань')->pause(5000)->click('#list-288>div:first-child') //Улица ->type('#input-293', 'на')->pause(4000)->click('#list-293>div:first-child') //Номер дома ->type('#input-298', '11') //ИНН ->type('#input-336', '123')->pause(4000)->click('#list-336>div:first-child') ->pause(1000) ->press('Оформить заказ') ->pause(4000) ->screenshot('checkout-6') //Проверяем ->assertSee('Ваш заказ принят!'); /* * Далее, возможно! нужно удалить тестовый заказ и созданного юзера */ }); } }
Вот и весь код.
Для запуска теста нужно набрать команду:
php artisan dusk
Разумеется, в данной коде есть кое какие недочеты.
1. Это для кнопок нужно прописать правильный атрибуты dusk (<button dusk="login-button">Login</button>)
2. После оформления заказа нужно удалить тестовый заказ.
php artisan dusk --filter Tests\Browser\UserTests::userOpenLink
ОтветитьУдалить