


Tests fonctionnels avec Laravel : développement piloté par les tests (avec code)
Le contenu de cet article concerne les tests fonctionnels de Laravel : le développement piloté par les tests (avec code). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
Créer un test fonctionnel carrousel
Lorsque vous effectuez des tests fonctionnels sur votre projet, assurez-vous d'isoler les tests fonctionnels de l'arrière-plan de gestion des tests fonctionnels du front-end. Dans cet exemple, j'utilise les espaces de noms Admin
et Front
pour séparer la gestion des tests backend et des tests des pages front-end.
Concentrons-nous maintenant sur les tests fonctionnels CRUD du backend de gestion carousel
. Ajoutez la classe test/Feature
dans le répertoire CarouselFeatureTest
.
<?php namespace Tests\Feature\Admin\Carousels; use Tests\TestCase; class CarouselFeatureTest extends TestCase { /** @test */ public function it_can_show_the_create_carousel_page() { $employee = factory(User::class)->create(); $this ->actingAs($employee, 'admin') ->get(route('admin.carousel.create')) ->assertStatus(200) ->assertSee('Title') ->assertSee('Subtitle') ->assertSee('Link') ->assertSee('Link Text') ->assertSee('Image'); } }
Analysons le code ci-dessus.
Nous avons besoin de la méthode
->actingAs()
pour passer le middleware d'authentification de l'utilisateur et simuler l'utilisateuradmin
(cette étape n'est pas requise si le garde d'authentification n'est pas utilisé dans le projet).Ensuite, nous avons retiré la page qui a créé
route()
viacarousel
.Affirme que le code d'état HTTP de la réponse est
200
.L'assertion finale est la valeur du texte qui sera vue sur la page.
Exécutez phpunit
et voyez ce qui se passe.
PHPUnit 6.5.7 by Sebastian Bergmann and contributors. E 1 / 1 (100%) Time: 920 ms, Memory: 26.00MB There was 1 error: 1) Tests\Feature\Admin\Carousels\CarouselFeatureTest::it_can_show_the_create_carousel_page InvalidArgumentException: Route [admin.carousel.create] not defined.
C’est normal de faire une erreur. Nous n'avons pas défini d'itinéraire dans le fichier de route web.php
, donc l'erreur ci-dessus se produira. Définissons cet itinéraire.
<?php Route::namespace('Admin')->group(function () { Route::resource('carousel', 'Carousels\CarouselController'); });
Analyse :
Il existe d'autres fichiers et dossiers de placement de répertoire dans mon répertoire
app/Http/Controllers
. J'ai des répertoiresAdmin
,Front
etAuth
.Il y a également un dossier
Admin
dans l'espace de nomsCarousels
, et dans ce dossier se trouvent des fichiersCarouselController.php
.
Exécutez la commande suivante dans le terminal pour créer le contrôleur
php artisan make:controller --resource Admin/Carousels/CarouselController
Après avoir défini l'itinéraire et créé le contrôleur, exécutez à nouveau phpunit
PHPUnit 6.5.7 by Sebastian Bergmann and contributors. F 1 / 1 (100%) Time: 987 ms, Memory: 28.00MB There was 1 failure: 1) Tests\Feature\Admin\Carousels\CarouselFeatureTest::it_can_show_the_create_carousel_page Failed asserting that '' contains "Title".
Ça marche ! L'erreur de routage a disparu mais nous avons rencontré une nouvelle erreur. La nouvelle erreur nous a fait penser que le service de cas de test avait trouvé le mot Title
sur la page de réponse de l'interface utilisateur. Hmm D'accord, c'est parce que nous n'avons pas renvoyé la vue dans la méthode create
, ajoutons le code pour renvoyer la vue. Les fichiers de vue
<?php namespace App\Http\Controllers\Admin\Carousels; use App\Http\Controllers\Controller; class CarouselController extends Controller { /** * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View */ public function create() { return view('admin.carousels.create'); } }
se trouvent dans le dossier de vue resource/views/admin/carousels/create.blade.php
@extends('layouts.admin.app') @section('content') <!-- Main content --> <section class="content"> @include('layouts.errors-and-messages') <p class="box"> <p class="box-body"> <form action="{{ route('admin.carousel.store') }}" method="post" enctype="multipart/form-data"> {{ csrf_field() }} <p class="form-group"> <label for="title">Title</label> <input type="text" name="title" id="title" class="form-control" placeholder="Title" value="{{ old('title') }}"> </p> <p class="form-group"> <label for="image">Image</label> <input type="file" name="image" id="image" class="form-control"> </p> <p class="form-group"> <label for="link">Link</label> <p class="input-group"> <span class="input-group-addon">http://</span> <input type="text" name="link" id="link" class="form-control" placeholder="www.example.com" value="{{ old('link') }}"> </p> </p> <p class="btn-group"> <a href="{{ route('admin.carousel.index') }}" class="btn btn-default btn-sm">Back</a> <button type="submit" class="btn btn-primary btn-sm">Create</button> </p> </form> </p> </p> </section> <!-- /.content --> @endsection
et il n'y a pas de dossiers admin
et carousels
, vous devez donc les créer vous-même .
Après avoir créé le fichier de vue blade, exécutez phpunit
➜ git: phpunit --filter=CarouselFeatureTest::it_can_show_the_create_carousel_page PHPUnit 6.5.7 by Sebastian Bergmann and contributors. . 1 / 1 (100%) Time: 810 ms, Memory: 28.00MB OK (1 test, 6 assertions)
Nice à nouveau, ça a l'air très bien.
Maintenant, si quelqu'un joue avec votre modèle de lame, vous le saurez immédiatement car le test échouera. Allez sur Github et vérifiez qui a gâché les fichiers de modèle, hé !
Créer un carrousel via les données POST
Testons maintenant si carousel
les données peuvent être créées via le formulaire sur la page.
Pour créer carousel
n'oubliez pas d'écrire le test en premier, il n'y a pas de raccourcis.
<?php namespace Tests\Feature\Admin\Carousels; use Tests\TestCase; class CarouselFeatureTest extends TestCase { /** @test */ public function it_can_create_the_carousel() { $file = UploadedFile::fake()->create('image.jpg'); $data = [ 'title' => $this->faker->word, 'link' => $this->faker->url, 'image' => $file, ]; $employee = factory(User::class)->create(); $this ->actingAs($employee, 'admin') ->post(route('admin.carousel.store'), $data) ->assertStatus(302) ->assertRedirect(route('admin.carousel.index')) ->assertSessionHas('message', 'Create carousel successful!'); } /** @test */ public function it_can_show_the_create_carousel_page() { $employee = factory(User::class)->create(); $this ->actingAs($employee, 'admin') ->get(route('admin.carousel.create')) ->assertStatus(200) ->assertSee('Title') ->assertSee('Subtitle') ->assertSee('Link') ->assertSee('Link Text') ->assertSee('Image'); } }
Analyse :
Nous affirmons que la page de liste du carrousel sera redirigée après une création réussie.
Nous affirmons également que les informations
Create carousel successful!
Flash ont été définies avec succès
Ce test échouera car la méthode store
() est maintenant Toujours vide, remplissons-le avec le code suivant :
<?php namespace App\Http\Controllers\Admin\Carousels; use App\Http\Controllers\Controller; use App\Shop\Carousels\Exceptions\CarouselNotFoundException; use App\Shop\Carousels\Exceptions\CreateCarouselErrorException; use App\Shop\Carousels\Exceptions\UpdateCarouselErrorException; use App\Shop\Carousels\Repositories\CarouselRepository; use App\Shop\Carousels\Repositories\CarouselRepositoryInterface; use App\Shop\Carousels\Requests\CreateCarouselRequest; use App\Shop\Carousels\Requests\UpdateCarouselRequest; use Illuminate\Http\UploadedFile; class CarouselController extends Controller { /** * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View */ public function create() { return view('admin.carousels.create'); } /** * @param CreateCarouselRequest $request * @return \Illuminate\Http\RedirectResponse */ public function store(CreateCarouselRequest $request) { try { $data = $request->except('_token'); if ($request->hasFile('image') && $request->file('image') instanceof UploadedFile) { $data['src'] = $request->file('image')->store('carousels', ['disk' => 'public']); } $carouselRepo = new CarouselRepository(new Carousel); $carouselRepo->createCarousel($data); $request->session()->flash('message', 'Create carousel successful!'); return redirect()->route('admin.carousel.index'); } catch (CreateCarouselErrorException $e) { $request->session()->flash('error', $e->getMessage()); return redirect()->back()->withInput(); } } }
Puis exécutez phpunit
➜ git: phpunit --filter=CarouselFeatureTest::it_can_create_the_carousel PHPUnit 6.5.7 by Sebastian Bergmann and contributors. . 1 / 1 (100%) Time: 993 ms, Memory: 28.00MB OK (1 test, 5 assertions)
Écrivez également des tests fonctionnels comme celui-ci lors de l'écriture d'autres méthodes de contrôleur, préparez-vous à partir .
Articles connexes recommandés :
Qu'est-ce que le service proxy Nginx ? Exemples de proxy direct et de proxy inverse nginx
Résumé de l'utilisation de la classe de collection dans Laravel (code)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Méthode pour obtenir le code de retour lorsque l'envoi par e-mail de Laravel échoue. Lorsque vous utilisez Laravel pour développer des applications, vous rencontrez souvent des situations où vous devez envoyer des codes de vérification. Et en réalité ...

Laravel Schedule Tâche d'exécution de dépannage non réactif Lorsque vous utilisez la planification des tâches de calendrier de Laravel, de nombreux développeurs rencontreront ce problème: Schedule: Exécuter ...

La méthode de traitement de l'échec de l'e-mail de Laravel à envoyer le code de vérification est d'utiliser Laravel ...

Comment implémenter la fonction du tableau de Cliquez sur personnalisé pour ajouter des données dans DCATADMIN (Laravel-Admin) lors de l'utilisation de DCAT ...

L'impact du partage des connexions redis dans Laravel Framework et sélectionnez Méthodes Lors de l'utilisation de Laravel Framework et Redis, les développeurs peuvent rencontrer un problème: grâce à la configuration ...

Connexion de la base de données des locataires personnalisés dans le package d'extension multi-locataire Laravel Stancl / location Lors de la construction d'applications multi-locataires à l'aide du package d'extension multi-locataire Laravel Stancl / location, ...

Laravelelognent Model Retrieval: Faconttement l'obtention de données de base de données Eloquentorm fournit un moyen concis et facile à comprendre pour faire fonctionner la base de données. Cet article présentera en détail diverses techniques de recherche de modèles éloquentes pour vous aider à obtenir efficacement les données de la base de données. 1. Obtenez tous les enregistrements. Utilisez la méthode All () pour obtenir tous les enregistrements dans la table de base de données: usApp \ Modèles \ Post; $ poters = post :: all (); Cela rendra une collection. Vous pouvez accéder aux données à l'aide de Foreach Loop ou d'autres méthodes de collecte: ForEach ($ PostsAs $ POST) {echo $ post->

Traiter efficacement 7 millions d'enregistrements et créer des cartes interactives avec la technologie géospatiale. Cet article explore comment traiter efficacement plus de 7 millions d'enregistrements en utilisant Laravel et MySQL et les convertir en visualisations de cartes interactives. Exigences initiales du projet de défi: extraire des informations précieuses en utilisant 7 millions d'enregistrements dans la base de données MySQL. Beaucoup de gens considèrent d'abord les langages de programmation, mais ignorent la base de données elle-même: peut-il répondre aux besoins? La migration des données ou l'ajustement structurel est-il requis? MySQL peut-il résister à une charge de données aussi importante? Analyse préliminaire: les filtres et les propriétés clés doivent être identifiés. Après analyse, il a été constaté que seuls quelques attributs étaient liés à la solution. Nous avons vérifié la faisabilité du filtre et établi certaines restrictions pour optimiser la recherche. Recherche de cartes basée sur la ville
