Unit Testing with Pest vs PHPUnit
We will see the process to convert a class with CRUD type tests from PHPUnit to Pest.
test('проверить все', функция () {
Категория: :фабрика ( 10 ) ;
$категории = Категория: :получить ()->toArray() ;
$это->получит ь(
'/api/категория/все',
[
'Авторизация' => 'Bearer ' . generateTokenAuth()
]
)->assertOk()->assertJson($categories) ;
}) ;
$ this ->post( '/api/category' , $ данные , [
'Принять' => 'приложение/json' ,
'Авторизация' => 'Bearer ' . $ this ->generateTokenAuth()
])
assertMatchesRegularExpression ("/Поле заголовка обязательно к заполнению./", $response-> getContent());
it ( "тест на удаление авторизации" , функция () {
Category:: factory ( 1 ) -> create();
$category = C ategory::first();
$this-> удалит ь ( '/api/category/' . $category->id,[], [
'Прин ять' => 'application/json' ,
'Авторизация' => 'Bearer ' . $this->generateTokenAuth()
])->assertStatus ( 200 ) -> assertContent( '"хорошо "' );
$category = Category::fi nd($category->id);
$this->assertEquals($category, null );
});
Краткие сведения
<?php
использовать приложение \ Модели \ Категорию ;
тест( 'протестировать все' , функция () {
Категория:: завод ( 10 );
$categories = Категория::get()-> toArray();
$this-> получить(
'/api/категория/все' ,
[
'Авторизация' => 'Носитель' . generateTokenAuth()
]
)->assertOk()->assertJson($categories);
});
i t( "те ст получения по идентификатору" , функция () {
Category::factor y( 1 )->create();
$category = Categor y::first();
$this->get( '/api/ca tegory/' . $category->id, [
'Авторизация' => 'Bearer ' . $this->generateTokenAuth()
])->assertStatus( 200 )->assertJ son([
'id' => $category->id,
'title' => $category->title,
'slug' => $category->slug
]);
});
it( "тест получения по слагу" , функция () {
Category::factory( 1 )->create();
$category = Category::first();
$th is->get( '/api/category/slug/' . $category->slug, [
'Авт оризация' => 'Bearer ' . $this->gene rateTokenAuth()
])->assertStatus ( 200 )->assertJson([
'id' => $category->id,
'ti tle' => $category->title,
'slug' => $category->slug
]);
});
it( "тестовый пост" , функция () {
$данные = [ ' название' => 'Категория 1' , 'slug' => 'cate-2-new' ];
$this->post( '/api/categ ory' , $data, [
'Accept' => 'application/json' ,
'Authorization' => 'Bearer ' . $this->generateTokenAuth()
])->assertStatus( 200 )->assertJson($data).
});
it( "пров ерка заголовка формы публикации " , функция () {
$data = [ 'title' => '' , 'slug' => 'cate-2-new' ];
$response = $this->post( '/api/category' , $data, [
'Accept' => 'application/json' ,
'Authorization' => 'Bearer ' . $this->generateTokenAuth()
])-> assertStatus( 422 );
// $this->assertStringContainsString("Поле заголовка обязательно.", $response->getContent());
$this-> assertMatchesRegularExpression( "/Поле заголовка об язательно./" , $response->getCon tent());
// $testArray = a rray("a"=>"значение a", "b"=>"значение b");
// $value = "значение b";
/// функция assert для пр оверки того, является ли 'value' значением массива
// $this-> assertContains ($value, $testArray) ;
// $this-> assertContains("Поле title обязательно.",['title'=>'["Поле title обязательно."]']) ;
});
it( "проверка ошибки публикации формы slug" , функция () {
$data = [ 'название' => 'категория 3' , 'slug' => '' ];
$response = $this->post( '/api/category' , $data, [
'Принять' => 'application/json' ,
'Авторизация' => 'Bearer ' . $this->generateTokenAuth()
])->a ssertStatus( 422 );
// $respons e->assertStringContainsStrin g("Поле slug обязательно", $response->getContent());
$this->assertMatchesRegularExpression( "/Поле slug обяза тельно для заполнения./" , $response->getContent());
});
it( "проверка уникальности поля slug в форме публикации" , функция () {
Category::create(
[
'title' => 'название категории' ,
'slug' => 'cate-3'
]
);
$data = [ 'tit le' => 'cate 3' , 'slug' => 'cate-3' ];
$response = $this->post( '/api/category' , $data, [
'Accept' => 'ap plicatio n/json' ,
'Authorization' => 'Bearer ' . $this->gener ateTokenAuth()
])->assertStatus( 422 );
$this->assertStringContainsString( "Слаг уже занят." , $response->getContent());
});
it( "тест на получение по идентификатору 404" , фун кция () {
$this->get( '/api/categ ory/1000' , [
'Accept' => 'a pplication/json' ,
'Authorization' => 'Bearer ' . $this->g enerateTokenAuth()
])->assertStatus( 404 )- >assertContent( '"Не найдено"' );
});
it( "тест на получение по слагер у 404" , функция () {
$this->get( '/api/category/slug/cate-not-exist' , [
'Принять' => 'application/json' ,
])->assertStatus( 404 )->assertContent( '"Не найдено"' );
});
it( "тестовый запрос" , функция () {
Category:: facto ry( 1 )->create();
$categoryOld = Category::f irst();
$dataEdit = [ 'название' => 'Новая категория 1' , 'slug' => 'cat e-1-new' ];
$this->put( '/api/category/' . $categoryOld->id, $dataEdit, [
'Принять' => 'приложение/json' ,
'Авторизация' => 'Bearer ' . $this->generateTokenAuth()
])->assertStatus( 200 )->assertJson($dataEdit).
});
it( "тестирование удаления авторизации" , функция () {
Category::factory( 1 )->create();
$categ ory = Category::first();
$thi s->delete( '/api/category/' . $category->id,[], [
'П ринят ь' => 'приложение/json' ,
'Авторизация' => 'Bearer ' . $this-> generateTokenAuth()
])->assertStatu s( 200 )
->assertContent( '"ОК"' );
$category = Category::find($category->id);
$this->assertEquals($category, null );
});
использует (TestCase:: класс , RefreshDatabase:: класс ) -> в ( 'Особенность' );
функция gener ateTokenAuth()
{
User::fact ory () -> create();
возвращает User: :first () -> createToken ( 'myapptoken' ) -> plainTextToken;
}
- Andrés Cruz
This material is part of my complete course and book; You can purchase them from the books and/or courses section, Curso y Libro Laravel 12 con Tailwind Vue 3, introducción a Jetstream Livewire e Inerta desde cero - 2025.