찾다
PHP 프레임워크LaravelLaravel을 사용한 기능 테스트: 테스트 중심 개발(코드 포함)

Laravel을 사용한 기능 테스트: 테스트 중심 개발(코드 포함)

Aug 08, 2018 pm 02:17 PM
laravel기능 테스트테스트 주도 개발

이 기사의 내용은 Laravel의 기능 테스트: 테스트 기반 개발(코드 포함)에 대한 내용입니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다. .

캐러셀 기능 테스트 만들기

프로젝트에서 기능 테스트를 수행할 때 관리 배경의 기능 테스트가 기능 테스트와 격리되어 있는지 확인하세요. 프론트엔드의 어서요. 이 예에서는 AdminFront 네임스페이스를 사용하여 관리 백엔드 테스트와 프런트엔드 페이지 테스트를 구분합니다. AdminFront来分离管理后台的测试和前端页面的测试。

现在让我们专注于管理后台carousel的CRUD功能测试。在test/Feature目录里添加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');
    }
}

我们来分析一下上面的代码。

  • 我们需要->actingAs()方法来通过用户认证中间件并且模拟admin用户(如果项目中没有进行使用认证看守器则不需要这一步)。

  • 然后我们通过route()取出了创建carousel的页面。

  • 断言响应的HTTP状态码为200

  • 最后断言会在页面上看到的文本值。

运行phpunit看看会发生什么。

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.

出错就对了。我们还没有在web.php这个路由文件中定义路由,所以将会出现上面的错误。让我们定义这个路由。

<?php Route::namespace(&#39;Admin&#39;)->group(function () {
    Route::resource('carousel', 'Carousels\CarouselController');
});

分析:

  • 在我的app/Http/Controllers目录中还有其他目录归置文件和文件夹。我有Admin, FrontAuth这几个目录。

  • Admin这个命名空间中还有Carousels文件夹,在这个文件夹中是CarouselController.php文件。

在终端中运行中运行如下命令来创建控制器

php artisan make:controller --resource Admin/Carousels/CarouselController

定义路由、创建好Controller之后,再次运行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".

起作用了!路由错误消失了不过我们遇到了一个新的错误,通过新错误让我们想到应该是测试用例服务在响应的UI页面上找到Title这个单词。Hmm 好吧,这是应为我们没有在create方法中返回视图,让我们加上返回视图的代码。

<?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(&#39;admin.carousels.create&#39;);
    }
}

视图文件位于resource/views/admin/carousels/create.blade.php

@extends('layouts.admin.app')

@section('content')
    <!-- Main content -->
    <section>
        @include('layouts.errors-and-messages')
        <p>
            </p>
<p>
                </p>
<form>
                    {{ csrf_field() }}
                    <p>
                        <label>Title</label>
                        <input>
                    </p>
                    <p>
                        <label>Image</label>
                        <input>
                    </p>
                    <p>
                        <label>Link</label>
                        </p>
<p>
                            <span>http://</span>
                            <input>
                        </p>
                    
                    <p>
                        <a>Back</a>
                        <button>Create</button>
                    </p>
                </form>
            
        
    </section>
    <!-- /.content -->
@endsection

视图文件夹中并没有admincarousels文件夹,所以你需要自己创建它们。

创建好blade视图文件后再次运行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,看起来非常好。

现在,如果有人搞乱了你的blade模板,你会马上知道因为这个测试会执行失败。到Github里去检查一下到底是谁搞乱模板文件,蛤!

通过POST数据创建carousel

现在让我们测试一下通过页面里的表单是否能够创建carousel数据。

要创建carousel别忘了先写测试,没有捷径。

<?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');
    }
}

分析:

  • 我们断言在创建成功后会重定向到carousel列表页。

  • 我们还断言成功设置了Create carousel successful!这个Flash信息

这个测试会执行失败,因为store()方法现在还空着,让我们用下面的代码填充它:

<?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(&#39;admin.carousels.create&#39;);
    }
    /**
     * @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();
        }
    }
}

然后运行phpunit

이제 관리 배경 캐러셀의 CRUD 기능 테스트에 집중하겠습니다. test/Feature 디렉터리에 CarouselFeatureTest 클래스를 추가합니다.

➜  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)
위 코드를 분석해 보겠습니다.

phpunit을 실행하고 무슨 일이 일어나는지 확인하세요.

rrreee 실수해도 괜찮습니다. 라우팅 파일 web.php에 경로를 정의하지 않았기 때문에 위와 같은 오류가 발생합니다. 이 경로를 정의해 보겠습니다. rrreee

분석:


  • app/Http/Controllers 디렉터리에 있습니다. 파일과 폴더가 배치되는 다른 디렉터리입니다. Admin, FrontAuth 디렉터리가 있습니다.
  • #🎜🎜#Admin 네임스페이스에도 Carousels 폴더가 있고, 이 폴더에는 CarouselController가 있습니다. php 파일. #🎜🎜#
#🎜🎜#컨트롤러를 생성하려면 터미널에서 다음 명령어를 실행하세요 #🎜🎜#rrreee#🎜🎜#라우트를 정의하고 컨트롤러를 생성한 후 다시 를 실행하세요 phpunit#🎜🎜#rrreee#🎜🎜# 작동합니다! 라우팅 오류는 사라졌지만 새로운 오류가 발생하여 테스트 사례 서비스가 응답 UI 페이지에서 제목이라는 단어를 발견했다고 생각했습니다. 흠 좋습니다. create 메서드에서 뷰를 반환하지 않았기 때문입니다. 뷰를 반환하는 코드를 추가해 보겠습니다. #🎜🎜#rrreee#🎜🎜#뷰 파일은 resource/views/admin/carousels/create.blade.php에 있습니다.#🎜🎜#rrreee#🎜🎜#가 없습니다 보기 폴더 admincarousels 폴더에 있으므로 직접 만들어야 합니다. #🎜🎜##🎜🎜#블레이드 뷰 파일을 생성한 후 다시 phpunit을 실행해 보세요. #🎜🎜#rrreee#🎜🎜#좋아요, 아주 좋아 보입니다. #🎜🎜##🎜🎜#이제 누군가가 블레이드 템플릿을 어지럽히면 테스트가 실패하므로 즉시 알 수 있습니다. Github에 가서 누가 템플릿 파일을 망쳤는지 확인해 보세요. #🎜🎜##🎜🎜#POST 데이터를 통해 캐러셀 생성#🎜🎜##🎜🎜#이제 페이지의 양식을 통해 캐러셀 데이터를 생성할 수 있는지 테스트해 보겠습니다. #🎜🎜##🎜🎜# 캐러셀을 만들려면 먼저 테스트를 작성하는 것을 잊지 마세요. 지름길은 없습니다. #🎜🎜#rrreee#🎜🎜#분석: #🎜🎜#
  • #🎜🎜#우리는 캐러셀 목록 페이지가 성공적으로 생성된 후 리디렉션될 것이라고 주장합니다. #🎜🎜#
  • #🎜🎜# 또한 캐러셀 만들기 성공! 플래시 메시지가 성공적으로 설정되었음을 확인합니다 #🎜🎜#
#🎜 🎜 # store() 메서드가 여전히 비어 있기 때문에 이 테스트는 실패합니다. 다음 코드로 채워보겠습니다. #🎜🎜#rrreee#🎜🎜#그런 다음 phpunit code>를 실행하세요. #🎜🎜#rrreee#🎜🎜#다른 컨트롤러 메서드를 작성할 때 이와 같은 기능 테스트를 작성하고 시작할 준비를 하세요. #🎜🎜##🎜🎜# 추천 관련 기사: #🎜🎜##🎜🎜##🎜🎜#Nginx 프록시 서비스란 무엇인가요? nginx 정방향 프록시 및 역방향 프록시의 예#🎜🎜##🎜🎜##🎜🎜##🎜🎜# Laravel의 컬렉션 클래스 사용 요약(코드)#🎜🎜##🎜🎜##🎜🎜## 🎜🎜 #laravel5.5 프레임워크에서 뷰 간 데이터를 공유하는 방법(코드 포함) #🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜#

위 내용은 Laravel을 사용한 기능 테스트: 테스트 중심 개발(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
포용의 환상 : 원격 작업의 고립과 외로움 해결포용의 환상 : 원격 작업의 고립과 외로움 해결Apr 25, 2025 am 12:28 AM

TocombatisolationandloneLinessInremotwork, componiesshouldimplementregular, meignmentfortuncations, andusetechnologyeftically

풀 스택 개발을위한 Laravel : 포괄적 인 가이드풀 스택 개발을위한 Laravel : 포괄적 인 가이드Apr 25, 2025 am 12:27 AM

laravelispopularforfull-stackdevelopmentBecauseItOffersAMESAMLESSEAMLESTBBOCKENDPOWERANDFRONDENDFLECTION.1) itsBackEndCapabilities, likeeloquentorm, simplifydatabaseintercations.2) theBladetemplatingEngineallowsforclean, dynamichtmltemplates.3) larvelmix

화상 회의 대결 : 원격 회의에 적합한 플랫폼 선택화상 회의 대결 : 원격 회의에 적합한 플랫폼 선택Apr 25, 2025 am 12:26 AM

화상 회의 플랫폼을 선택할 때의 주요 요소에는 사용자 인터페이스, 보안 및 기능이 포함됩니다. 1) 사용자 인터페이스는 줌과 같은 직관적이어야합니다. 2) 보안에주의를 기울여야하며 Microsoft Teams는 엔드 투 엔드 암호화를 제공합니다. 3) 기능은 요구 사항을 일치시키기 위해 필요하며 Googlemeet은 짧은 회의에 적합하며 Ciscowebex는 고급 협업 도구를 제공합니다.

최신 Laravel과 호환되는 데이터베이스 버전은 무엇입니까?최신 Laravel과 호환되는 데이터베이스 버전은 무엇입니까?Apr 25, 2025 am 12:25 AM

Laravel10의 최신 버전은 MySQL 5.7 이상, PostgreSQL 9.6 이상, SQLite 3.8.8 이상, SQLServer 2017 이상과 호환됩니다. 이러한 버전은 JSON 데이터 유형 MySQL5.7과 같은 Laravel의 ORM 기능을 지원하여 쿼리 및 스토리지 효율성을 향상시키기 때문에 선택됩니다.

Laravel을 풀 스택 프레임 워크로 사용하는 이점Laravel을 풀 스택 프레임 워크로 사용하는 이점Apr 25, 2025 am 12:24 AM

laravelisanexcellentchoiceforfull-stackdevelopmentduetoitsrobustfeaturesandeaseofuse.1) 1) itsimplifiescomplextaskswithitsmodernphpsyntaxandtoolslakeforfront-endandeloquentormforback-end.2) laravel'secosystem, entercancesancancesancancessancancesancancesancesancesancancesnan

Laravel의 최신 버전은 무엇입니까?Laravel의 최신 버전은 무엇입니까?Apr 24, 2025 pm 05:17 PM

LARAVEL10, RELEARTESTERSION. ISTHELATESTVERSION. ISTHELATESTERSION.ITFEATURES : 1) 개선 된 오류가 개선 된 사람을 사용하여 개선되었습니다.

최신 Laravel 버전은 개발을 어떻게 단순화합니까?최신 Laravel 버전은 개발을 어떻게 단순화합니까?Apr 24, 2025 pm 05:01 PM

thelatestlaravelversionenhancesdevelopmentwith : 1) simplifiedroutingusingiMplicitModelBinding, 2) enloquentCapabilities withNeweRyMethods, 및 3) 개선 된 개선 된 개선 된 kepportOndHefeatureslikeNameDarguments,

최신 Laravel 버전의 릴리스 노트는 어디에서 찾을 수 있습니까?최신 Laravel 버전의 릴리스 노트는 어디에서 찾을 수 있습니까?Apr 24, 2025 pm 04:53 PM

laravel.com/docs에서 최신 Laravel 버전의 릴리스 노트를 찾을 수 있습니다. 1) 릴리스 노트는 새로운 기능, 버그 수정 및 개선에 대한 자세한 정보를 제공합니다. 2) 새로운 기능의 적용을 이해하는 데 도움이되는 예와 설명이 포함되어 있습니다. 3) 새로운 기능의 잠재적 복잡성과 후진 호환성 문제에주의하십시오. 4) 릴리스 노트를 정기적으로 검토하면 업데이트를 유지하고 혁신을 고무시킬 수 있습니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

안전한 시험 브라우저

안전한 시험 브라우저

안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.