Home> PHP Framework> Laravel> body text

Functional testing with Laravel: test-driven development (with code)

不言
Release: 2018-08-08 14:17:11
Original
2996 people have browsed it

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. .

Create carousel functional test

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 namespacesAdminandFrontto 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 theCarouselFeatureTestclass in thetest/Featuredirectory.

create(); $this ->actingAs($employee, 'admin') ->get(route('admin.carousel.create')) ->assertStatus(200) ->assertSee('Title') ->assertSee('Subtitle') ->assertSee('Link') ->assertSee('Link Text') ->assertSee('Image'); } }
Copy after login

Let’s analyze the above code.

  • We need the->actingAs()method to pass the user authentication middleware and simulate theadminuser (if it is not used in the project Authentication guards do not require this step).

  • Then we took out the page that createdcarouselthroughroute().

  • Assert that the HTTP status code of the response is200.

  • The final assertion is the text value that will be seen on the page.

Runphpunitand 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.
Copy after login

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'); });
Copy after login

Analysis:

  • There are other directory placement files and folders in myapp/Http/Controllersdirectory. I have these directoriesAdmin,FrontandAuth.

  • There is also aCarouselsfolder in theAdminnamespace, and in this folder isCarouselController.phpdocument.

Run the following command in the terminal to create the controller

php artisan make:controller --resource Admin/Carousels/CarouselController
Copy after login

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".
Copy after login

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 wordTitleon the response UI page. Hmm Well, this is because we did not return the view in thecreatemethod, 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')

{{ csrf_field() }}

http://

Back

@endsection
Copy after login

views folder and does not have theadminandcarouselsfolders, 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)
Copy after login

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!

Create carousel through POST data

Now let us test whethercarouseldata can be created through the form on the page.

To createcarouselDon’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'); } }
Copy after login

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(); } } }
Copy after login

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)
Copy after login

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)

In laravel5.5 framework How to share data between views? Two ways to share data between views (with 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!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!