The content of this article is about Laravel’s functional testing: test-driven development (with code). It has certain reference value. Friends in need can refer to it. I hope it will be helpful to you. .
When performing functional testing on your project, be sure to isolate the functional testing of the management background from the functional testing of the front-end. In this example, I use the namespacesAdmin
andFront
to separate the management backend testing and the front-end page testing.
Now let us focus on the CRUD functional testing of the management backgroundcarousel
. Add theCarouselFeatureTest
class in thetest/Feature
directory.
create(); $this ->actingAs($employee, 'admin') ->get(route('admin.carousel.create')) ->assertStatus(200) ->assertSee('Title') ->assertSee('Subtitle') ->assertSee('Link') ->assertSee('Link Text') ->assertSee('Image'); } }
Let’s analyze the above code.
We need the->actingAs()
method to pass the user authentication middleware and simulate theadmin
user (if it is not used in the project Authentication guards do not require this step).
Then we took out the page that createdcarousel
throughroute()
.
Assert that the HTTP status code of the response is200
.
The final assertion is the text value that will be seen on the page.
Runphpunit
and see what happens.
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.
It’s okay to make a mistake. We have not defined the route in the routing fileweb.php
, so the above error will occur. Let's define this route.
group(function () { Route::resource('carousel', 'Carousels\CarouselController'); });
Analysis:
There are other directory placement files and folders in myapp/Http/Controllers
directory. I have these directoriesAdmin
,Front
andAuth
.
There is also aCarousels
folder in theAdmin
namespace, and in this folder isCarouselController.php
document.
Run the following command in the terminal to create the controller
php artisan make:controller --resource Admin/Carousels/CarouselController
After defining the route and creating the Controller, run it againphpunit
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".
It works! The routing error disappeared but we encountered a new error. The new error made us think that the test case service found the wordTitle
on the response UI page. Hmm Well, this is because we did not return the view in thecreate
method, let us add the code to return the view.
Copy after login
The view file is located in theresource/views/admin/carousels/create.blade.php
@extends('layouts.admin.app') @section('content')@include('layouts.errors-and-messages') @endsection
views folder and does not have theadmin
andcarousels
folders, so you need to create them yourself.
After creating the blade view file, run it againphpunit
➜ 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, it looks very good.
Now, if someone messes with your blade template, you'll know immediately because the test will fail. Go to Github and check to see who messed up the template files, duh!
Now let us test whethercarousel
data can be created through the form on the page.
To createcarousel
Don’t forget to write the test first, there are no shortcuts.
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'); } }
Analysis:
We assert that the carousel list page will be redirected after successful creation.
We also assert that theCreate carousel successful!
This Flash information
This test will fail to execute because Thestore
() method is still empty now, let’s fill it with the following code:
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(); } } }
Then runphpunit
➜ 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)
while writing other Write functional tests like this for controller methods, and you're ready to go.
Recommended related articles:
What is Nginx proxy service? Examples of nginx forward proxy and reverse proxy
Summary of usage of collection class in Laravel (code)
The above is the detailed content of Functional testing with Laravel: test-driven development (with code). For more information, please follow other related articles on the PHP Chinese website!