laravel 5 單元測試


laravel 5 單元測試的一些屬性和方法

phpunit文檔地址:https://phpunit.de/manual/current/zh_cn/appendixes.assertions.html

1、簡介 (#f4645f

Laravel 植根於測試,實際上,基於 PHPUnit 對測試提供支持是開箱即用的,並且 phpunit.xml 文件已經為應用做好了所需配置。框架還提供了方便的輔助方法允許你對應用進行優雅的測試。

默認情況下,tests 目錄包含了兩個子目錄:Feature 和 Unit,分別用於功能測試單元測試,單元測試專注於小的、相互隔離的代碼,實際上,大部分單元測試可能都是聚焦於單個方法。功能測試可用於測試較大區塊的代碼,包括若干組件之前的交互,甚至一個完整的 HTTP 請求。

Feature 和 Unit 測試目錄下默認都提供了 ExampleTest.php 文件,安裝完新的 Laravel 應用后,只需簡單在命令行運行 phpunit 即可運行測試。

2、環境

運行測試的時候,Laravel 會自動設置環境變量為 testing,這是因為 phpunit.xml 中已經配備了相應設置。Laravel 在測試時還會自動配置 SessionCache 驅動為 array,這意味着測試時不會持久化存儲 SessionCache

如果需要的話,你也可以定義其它測試環境配置值。testing 環境變量可以在 phpunit.xml 文件中配置,但是需要在運行測試之前使用 Artisan 命令 config:clear 清除配置緩存。

3、創建&運行測試

在你的項目根目錄,使用 Artisan 命令 make:test

php artisan make:test UserTest // 在Feature目錄下創建測試類(功能測試)

php artisan make:test UserTest --unit // 在Unit目錄下創建測試類(單元測試)

如下:

<?php

namespace Tests\Feature;
use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;

class UserTest extends TestCase
{
    /**
     * A basic test example.
     *
     * @return void
     */
    public function testExample()
    {
        $this->assertTrue(true);
    }
}

注:如果在測試類中定義了自己的 setUp 方法,確保在該方法中調用 parent::setUp()

創建完測試類后,就可以像使用 PHPUnit 一樣定義測試方法,要運行測試,只需在終端執行 phpunit 命令即可:、

注意:如果運行時出現 -bash: phpunit: command not found

命令改成:

vendor/bin/phpunit

運行單個測試示例:

vendor/bin/phpunit --filter=UserTest

phpunit windows安裝方法參考我的文章:http://www.cnblogs.com/love-snow/articles/7602786.html

Laravel 為生成 HTTP 請求、測試輸出提供了流式 API。舉個例子,我們看下下面定義的測試:

<?php

namespace Tests\Feature;

use Tests\TestCase;
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;

class ExampleTest extends TestCase
{
    /**
     * 基本測試示例.
     *
     * @return void
     */
    public function testBasicTest()
    {
        $response = $this->get('/');

        $response->assertStatus(200);
    }
}

get 方法生成了一個 GET 請求,而 assertStatus 方法斷言返回的響應應該包含給定的 HTTP 狀態碼。除了這個簡單的斷言之外,Laravel 還包含檢查響應頭、響應內容、響應 JSON 結構等多種斷言。

會話/認證

Laravel 提供了多個輔助函數用於在 HTTP 測試期間處理會話(Session),首先,你可以使用 withSession 方法來設置會話數據。這對於在發起請求之前加載會話數據很有用:

<?php

class ExampleTest extends TestCase
{
    public function testApplication()
    {
        $response = $this->withSession(['foo' => 'bar'])
                         ->get('/');
    }
}

當然,會話最常見的用途還是維護認證用戶的狀態。對此,輔助函數 actionAs 方法提供了一個簡單的方式來認證當前用戶,例如,我們可以使用模型工廠來生成並認證用戶:

<?php

use App\User;

class ExampleTest extends TestCase
{
    public function testApplication()
    {
        $user = factory(User::class)->create();

        $response = $this->actingAs($user)
                         ->withSession(['foo' => 'bar'])
                         ->get('/');
    }
}

你還可以通過傳遞 guard 名作為 actionAs 方法的第二個參數來指定使用哪一個 guard 來認證給定用戶:

$this->actingAs($user, 'api')

4、測試 JSON API

Laravel 還提供了多個輔助函數用於測試 JSON API 及其響應。例如, jsongetpostputpatch 和 delete 方法用於通過多種 HTTP 請求方式發出請求。

你還可以輕松傳遞數據和請求頭到這些方法。作為開始,我們編寫測試來生成 POST 請求到 /user 並斷言返回的數據是否是我們所期望的:

<?php

class ExampleTest extends TestCase
{
    /**
     * 基本功能測試示例.
     *
     * @return void
     */
    public function testBasicExample()
    {
        $response = $this->json('POST', '/user', ['name' => 'Sally']);

        $response
            ->assertStatus(200)
            ->assertJson([
                'created' => true,
            ]);
    }
}

注:assertJson 方法將響應轉化為數組並使用 PHPUnit::assertArraySubset 驗證給定數組在應用返回的 JSON 響應中存在。所以,如果在 JSON 響應中存在其它屬性,這個測試仍然會通過,只要給定的片段存在即可。

精確驗證JSON匹配

如果你想要驗證給定數組和應用返回的 JSON 能夠完全匹配,使用 assertExactJson 方法:

<?php

class ExampleTest extends TestCase
{
    /**
     * A basic functional test example.
     *
     * @return void
     */
    public function testBasicExample()
    {
        $response = $this->json('POST', '/user', ['name' => 'Sally']);

        $response
            ->assertStatus(200)
            ->assertExactJson([
                'created' => true,
            ]);
    }
}

測試文件上傳

Illuminate\Http\UploadedFile 類提供了一個 fake 方法用於生成假文件或圖片進行測試。這一機制和 Storage 門面的 fake 方法聯合在一起,極大的簡化了文件上傳的測試。例如,你可以聯合這兩個特性來輕松測試頭像上傳表單:

<?php

namespace Tests\Feature;

use Tests\TestCase;
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Facades\Storage;
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;

class ExampleTest extends TestCase
{
    public function testAvatarUpload()
    {
        Storage::fake('avatars');

        $response = $this->json('POST', '/avatar', [
            'avatar' => UploadedFile::fake()->image('avatar.jpg')
        ]);

        // 斷言該文件被存儲...
        Storage::disk('avatars')->assertExists('avatar.jpg');

        // 斷言一個文件不存在...
        Storage::disk('avatars')->assertMissing('missing.jpg');
    }
}

偽造文件自定義

使用 fake 方法創建文件的時候,你可以指定寬度、高度、以及圖片的尺寸以便更好的測試驗證規則:

UploadedFile::fake()->image('avatar.jpg', $width, $height)->size(100);

除了創建圖片之外,你還可以使用 create 方法創建其它類型的文件:

UploadedFile::fake()->create('document.pdf', $sizeInKilobytes);

自定義HTTP請求

如果你想要在應用中生成自定義HTTP請求並獲取完整的 Illuminate\Http\Response對象,可以使用 call方法:

public function testApplication(){
    $response = $this->call('GET', '/');
    $this->assertEquals(200, $response->status());
}

如果你要生成POSTPUT, 或者 PATCH請求可以在請求中傳入輸入數據數組,在路由或控制器中可以通過Request實例訪問請求數據:

$response = $this->call('POST', '/user', ['name' => 'Taylor']);

有效的斷言方法:

Laravel 為 PHPUnit 測試提供了多個自定義的斷言方法。這些斷言可以通過測試方法jsongetpostput 和 delete 返回的響應進行訪問:

$response->assertStatus($code); //斷言響應是否包含給定code
$response->assertRedirect($uri); //斷言響應是否重定向到給定URI
$response->assertHeader($headerName, $value = null); //斷言請求頭是否在響應中存在
$response->assertCookie($cookieName, $value = null); //斷言響應是否包含給定cookie
$response->assertPlainCookie($cookieName, $value = null); //斷言響應是否包含給定cookie(未加密)
$response->assertSessionHas($key, $value = null); //斷言會話是否包含給定數據片段
$response->assertSessionHasErrors(array $keys); //斷言會話是否包含給定片段錯誤
$response->assertSessionMissing($key); //斷言會話不包含給定鍵
$response->assertJson(array $data); //斷言響應包含給定JSON數據
$response->assertJsonFragment(array $data); //斷言響應包含給定JSON片段
$response->assertJsonMissing(array $data); //斷言響應不包含給定JSON片段
$response->assertExactJson(array $data); //斷言響應包含完整的給定JSON片段
$response->assertJsonStructure(array $structure); //斷言響應包含給定JSON結構
$response->assertViewHas($key, $value = null); //斷言響應視圖包含給定數據片段

5、測試——數據庫

1、簡介

Laravel 提供了多個有用的工具讓測試數據庫驅動的應用變得更加簡單。首先,你可以使用輔助函數 assertDatabaseHas 來斷言數據庫中的數據是否和給定數據集合匹配。例如,如果你想要通過 email 值為 sally@example.com 的條件去數據表 users 查詢是否存在該記錄 ,我們可以這樣做:

public function testDatabase()
{
    // Make call to application...

    $this->assertDatabaseHas('users', [
        'email' => 'sally@example.com'
    ]);
}

當然,assertDatabaseHas 方法和其它類似輔助方法都是為了方便起見進行的封裝,你也可以使用其它 PHPUnit 內置的斷言方法來進行測試。

2、每次測試后重置數據庫

每次測試后重置數據庫通常很有用,這樣的話上次測試的數據不會影響下一次測試。

使用遷移

一種重置數據庫狀態的方式是每次測試后回滾數據庫並在下次測試前重新遷移。Laravel 提供了一個簡單的 DatabaseMigrations trait 來自動為你處理。在測試類上簡單使用該 trait 如下:

<?php namespace Tests\Feature; use Tests\TestCase; use Illuminate\Foundation\Testing\WithoutMiddleware; use Illuminate\Foundation\Testing\DatabaseMigrations; use Illuminate\Foundation\Testing\DatabaseTransactions; class ExampleTest extends TestCase { use DatabaseMigrations; /** * A basic functional test example. * * @return void */
    public function testBasicExample() { $response = $this->get('/'); // ...
 } }

使用事務

另一種重置數據庫狀態的方式是將每一個測試用例封裝到一個數據庫事務中,Laravel 提供了方便的 DatabaseTransactions trait 自動為你處理:

<?php

namespace Tests\Feature;

use Tests\TestCase;
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;

class ExampleTest extends TestCase
{
    use DatabaseTransactions;

    /**
     * A basic functional test example.
     *
     * @return void
     */
    public function testBasicExample()
    {
        $response = $this->get('/');

        // ...
    }
}

:該 trait 只在事務中封裝默認數據庫連接。如果你的應用使用了多個數據庫連接,需要在測試類上定義一個 $connectionsToTransact 屬性。該屬性應該是用於執行事務的連接名數組。

6、編寫工廠

測試時,通常需要在執行測試前插入新數據到數據庫。在創建測試數據時,Laravel 允許你使用 模型工廠 為每個 Eloquent 模型 定義默認的屬性值集合,而不用手動為每一列指定值。

作為開始,我們看一下 database/factories/ModelFactory.php 文件,該文件包含了一個工廠定義:

$faker 能生成的字段類型及實例https://github.com/fzaninotto/Faker 

$factory->define(App\User::class, function (Faker\Generator $faker) {
    static $password;

    return [
        'name' => $faker->name,
        'email' => $faker->unique()->safeEmail,
        'password' => $password ?: $password = bcrypt('secret'),
        'remember_token' => str_random(10),
    ];
});

在閉包中,作為工廠定義,我們返回該模型上所有屬性默認測試值。該閉包接收 PHP 庫 Faker 實例,從而允許你方便地為測試生成多種類型的隨機數據。

當然,你可以添加更多工廠到 ModelFactory.php 文件。你還可以為每個模型創建額外的工廠文件以便更好地組織管理,例如,你可以在 database/factories 目錄下創建 UserFactory.php 和 CommentFactory.php 文件。 factories目錄下的所有文件都會被Laravel 自動加載。

工廠狀態

狀態允許你在任意組合中定義可用於模型工廠的離散修改,例如, User 模型可能有一個 delinquent 狀態用於修改某個默認屬性值,你可以使用 state 方法來定義狀態轉化:

$factory->state(App\User::class, 'delinquent', function ($faker) {
    return [
        'account_status' => 'delinquent',
    ];
});

7、使用工廠

創建模型

定義好工廠后,可以在測試或數據庫填充文件中通過全局的 factory 方法使用它們來生成模型實例,所以,讓我們看一些創建模型的例子,首先,我們使用 make 方法,該方法創建模型但不將其保存到數據庫:

public function testDatabase(){
    $user = factory(App\User::class)->make();
    // 用戶模型測試...
}

還可以創建多個模型集合或者創建給定類型的模型:

// 創建3個 App\User 實例...
$users = factory(App\User::class, 3)->make();

應用狀態

還可以應用任意狀態到模型,如果你想要應用多個狀態轉化到模型,需要指定每個你想要應用的狀態名:

$users = factory(App\User::class, 5)->states('deliquent')->make();
$users = factory(App\User::class, 5)->states('premium', 'deliquent')->make();

覆蓋屬性

如果你想要覆蓋模型中的某些默認值,可以傳遞數組值到 make 方法,只有指定值才會被替換,剩下值保持工廠指定的默認值不變:

$user = factory(App\User::class)->make([
    'name' => 'Abigail',
]);

持久化模型

create 方法不僅能創建模型實例,還可以使用 Eloquent 的 save 方法將它們保存到數據庫:

public function testDatabase()
{
    // 創建單個 App\User 實例...
    $user = factory(App\User::class)->create();

    // 創建3個 App\User 實例...
    $users = factory(App\User::class, 3)->create();

    // 在測試中使用模型...
}

你可以通過傳遞數組到 create 方法覆蓋模型上的屬性:

$user = factory(App\User::class)->create([
    'name' => 'Abigail',
]);

關聯關系

在本例中,我們添加一個關聯到創建的模型,使用 create 方法創建多個模型的時候,會返回一個 Eloquent 集合實例,從而允許你使用集合提供的所有方法,例如 each

$users = factory(App\User::class, 3)
           ->create()
           ->each(function($u) {
                $u->posts()->save(factory(App\Post::class)->make());
            });

關聯關系 & 屬性閉包

還可以使用工廠中的閉包屬性添加關聯關系到模型,例如,如果你想要在創建 Post 的時候創建一個新的 User 實例,可以這么做:

$factory->define(App\Post::class, function ($faker) {
    return [
        'title' => $faker->title,
        'content' => $faker->paragraph,
        'user_id' => function () {
            return factory(App\User::class)->create()->id;
        }
    ];
});

這些閉包還接收包含它們的工廠屬性數組:

$factory->define(App\Post::class, function ($faker) {
    return [
        'title' => $faker->title,
        'content' => $faker->paragraph,
        'user_id' => function () {
            return factory(App\User::class)->create()->id;
        },
        'user_type' => function (array $post) {
            return App\User::find($post['user_id'])->type;
        }
    ];
});

8、測試——模擬

1、簡介

測試 Laravel 應用的時候,你可能還想要“ 模擬 ”應用的特定狀態,以便在測試中不讓它們真的執行。

例如,測試觸發事件的控制器時,你可能想要模擬事件監聽器以便它們不在測試期間真的執行。這樣的話你就可以只測試控制器的 HTTP 響應,而不必擔心事件監聽器的執行,因為事件監聽器可以在它們自己的測試用例中被測試。

Laravel 開箱為模擬事件、任務以及工廠提供了輔助函數,這些輔助函數主要是在 Mockery 之上提供了一個方便的層這樣你就不必手動調用復雜的 Mockery 方法。當然,你也可以使用 Mockery 或 PHPUnit 來創建自己的模擬。

2、偽造Bus

作為模擬的替代方案,你可以使用Bus門面的 fake方法來阻止任務被分發,使用 fake的時候,測試代碼執行后會進行斷言:

<?php

namespace Tests\Feature;

use Tests\TestCase;
use App\Jobs\ShipOrder;
use Illuminate\Support\Facades\Bus;
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;

class ExampleTest extends TestCase
{
    public function testOrderShipping()
    {
        Bus::fake();

        // 執行訂單裝運...
        Bus::assertDispatched(ShipOrder::class, function ($job) use ($order) {
            return $job->order->id === $order->id;
        });

        // 斷言一份工作沒有被分派...
        Bus::assertNotDispatched(AnotherJob::class);
    }
}

3、偽造事件

作為模擬的替代方案,你可以使用Event門面的fake方法來阻止事件監聽器被執行,然后斷言事件被分發,甚至檢查接收的數據。當使用fake時,測試代碼執行后會進行斷言:

<?php

namespace Tests\Feature;

use Tests\TestCase;
use App\Events\OrderShipped;
use App\Events\OrderFailedToShip;
use Illuminate\Support\Facades\Event;
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;

class ExampleTest extends TestCase
{
    /**
     * Test order shipping.
     */
    public function testOrderShipping()
    {
        Event::fake();

        // Perform order shipping...

        Event::assertDispatched(OrderShipped::class, function ($e) use ($order) {
            return $e->order->id === $order->id;
        });

        Event::assertNotDispatched(OrderFailedToShip::class);
    }
}

4、偽造郵件

你可以使用Mail門面的fake方法阻止郵件發送,然后斷言可郵寄對象被發送給用戶,甚至檢查接收的數據。使用fake的時候,斷言會在測試代碼執行后進行:

<?php

namespace Tests\Feature;

use Tests\TestCase;
use App\Mail\OrderShipped;
use Illuminate\Support\Facades\Mail;
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;

class ExampleTest extends TestCase
{
    public function testOrderShipping()
    {
        Mail::fake();

        // 執行訂單裝運...

        Mail::assertSent(OrderShipped::class, function ($mail) use ($order) {
            return $mail->order->id === $order->id;
        });

        // 斷言一條消息被發送給給定的用戶...
        Mail::assertSent(OrderShipped::class, function ($mail) use ($user) {
            return $mail->hasTo($user->email) &&
                   $mail->hasCc('...') &&
                   $mail->hasBcc('...');
        });

        // 斷言沒有發送郵件...
        Mail::assertNotSent(AnotherMailable::class);
    }
}

5、偽造通知

你可以使用 Notification 門面的 fake 方法來阻止通知被發送,之后斷言通知是否被發送給用戶,甚至可以檢查接收的數據。使用 fake 的時候,斷言會在測試代碼執行后進行:

<?php

namespace Tests\Feature;

use Tests\TestCase;
use App\Notifications\OrderShipped;
use Illuminate\Support\Facades\Notification;
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;

class ExampleTest extends TestCase
{
    public function testOrderShipping()
    {
        Notification::fake();

        // 執行訂單裝運...

        Notification::assertSentTo(
            $user,
            OrderShipped::class,
            function ($notification, $channels) use ($order) {
                return $notification->order->id === $order->id;
            }
        );

        // 斷言發送給給定用戶的通知...
        Notification::assertSentTo(
            [$user], OrderShipped::class
        );

        // 斷言沒有發送通知...
        Notification::assertNotSentTo(
            [$user], AnotherNotification::class
        );
    }
}

6、偽造隊列

作為模擬的替代方案,你可以使用Queue門面的fake方法來阻止任務被推動到隊列,然后斷言任務是否被推送到隊列,甚至檢查接收的數據。使用fake的時候,斷言會在測試代碼執行后進行:

<?php

namespace Tests\Feature;

use Tests\TestCase;
use App\Jobs\ShipOrder;
use Illuminate\Support\Facades\Queue;
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;

class ExampleTest extends TestCase
{
    public function testOrderShipping()
    {
        Queue::fake();

        // 執行訂單裝運...

        Queue::assertPushed(ShipOrder::class, function ($job) use ($order) {
            return $job->order->id === $order->id;
        });

        // 斷言一個Job被推到一個給定的隊列中...
        Queue::assertPushedOn('queue-name', ShipOrder::class);

        // 斷言一個job沒有被推進隊列中...
        Queue::assertNotPushed(AnotherJob::class);
    }
}

7、偽造存儲

Storage門面的fake方法允許你輕松構造偽造硬盤,以及使用UploadedFile類生成的文件,從而極大簡化了文件上傳測試,例如:

<?php

namespace Tests\Feature;

use Tests\TestCase;
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Facades\Storage;
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;

class ExampleTest extends TestCase
{
    public function testAvatarUpload()
    {
        Storage::fake('avatars');

        $response = $this->json('POST', '/avatar', [
            'avatar' => UploadedFile::fake()->image('avatar.jpg')
        ]);

        // 斷言該文件被存儲...
        Storage::disk('avatars')->assertExists('avatar.jpg');

        // 斷言一個文件不存在...
        Storage::disk('avatars')->assertMissing('missing.jpg');
    }
}

8、門面

不同於傳統的靜態方法調用,門面可以被模擬。這與傳統靜態方法相比是一個巨大的優勢,並且你可以對依賴注入進行測試。測試的時候,你可能經常想要在控制器中模擬 Laravel 門面的調用,例如,看看下面的控制器動作:

<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\Cache;

class UserController extends Controller
{
    /**
     * 顯示應用用戶列表
     *
     * @return Response
     */
    public function index()
    {
        $value = Cache::get('key');

        //
    }
}

我們可以通過使用 shouldReceive 方法模擬 Cache 門面的調用,該方法返回一個Mockery模擬的實例,由於門面通過 Laravel 服務容器進行解析和管理,所以它們比通常的靜態類更具有可測試性。例如,我們可以來模擬 Cache 門面 get 方法的調用:

<?php

namespace Tests\Feature;

use Tests\TestCase;
use Illuminate\Support\Facades\Cache;
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;

class UserControllerTest extends TestCase
{
    public function testGetIndex()
    {
        Cache::shouldReceive('get')
                    ->once()
                    ->with('key')
                    ->andReturn('value');

        $response = $this->get('/users');

        // ...
    }
}

注:不要模擬 Request 門面,取而代之地,可以在測試時傳遞期望輸入到 HTTP 輔助函數如 get 和 post,類似地,不要模擬 Config 門面,在測試中調用 Config::set 方法即可。

 

下面介紹一些 laravel5 Crawler(網絡爬蟲) 測試中常用的屬性和方法

 1 $this->response //web應用返回的最后一個響應
 2 $this->currentUri //當前訪問的URL
 3 visit($uri) //通過GET請求訪問給定URI
 4 get($uri, array $headers = []) //通過GET請求獲取給定URI頁面的內容,可以傳遞請求頭信息(可選)
 5 post($uri, array $data = [], array $headers = []) //提交POST請求到給定URI
 6 put($uri, array $data = [], array $headers = []) //提交PUT請求到給定URI
 7 patch($uri, array $data = [], array $headers = []) //提交PATCH請求到給定URI
 8 delete($uri, array $data = [], array $headers = []) //提交DELETE請求到給定URI
 9 followRedirects() //根據最后響應進行任意重定向
10 see($text, $negate = false) //斷言給定文本在頁面中是否出現
11 seeJson(array $data = null) //斷言響應中是否包含JSON,如果傳遞了$data,還要斷言包含的JSON是否與給定的匹配
12 seeStatusCode($status) //斷言響應是否包含期望的狀態碼
13 seePageIs($uri) //斷言當前頁面是否與給定URI匹配
14 seeOnPage($uri)和landOn($uri) //seePageIs()的別名
15 click($name) //使用給定body、name或者id點擊鏈接
16 type($text, $element) //使用給定文本填充輸入框
17 check($element) //檢查頁面上的checkbox復選框
18 select($option, $element) //選擇頁面上下拉列表的某個選項
19 attach($absolutePath, $element) //上傳文件到表單
20 press($buttonText) //通過使用給定文本的按鈕提交表單
21 withoutMiddleware() //在測試中不使用中間件
22 dump() //輸出最后一個響應返回的內容

提供給 PHPUnit 使用的應用方法和屬性:

 1 $app //Laravel 5 應用實例
 2 $code //Artisan命令返回的最后一個碼值
 3 refreshApplication() //刷新應用。該操作由TestCase的setup()方法自動調用
 4 call($method, $uri, $parameters = [], $cookies = [], $files = [], $server = [], $content = null) //調用給定URI並返回響應
 5 callSecure($method, $uri, $parameters = [], $cookies = [], $files = [], $server = [], $content = null) //調用給定HTTPS URI並返回響應
 6 action($method, $action, $wildcards = [], $parameters = [], $cookies = [], $files = [], $server = [], $content = null) //調用控制器動作並返回響應
 7 route($method, $name, $routeParameters = [], $parameters = [], $cookies = [], $files = [], $server = [], $content = null) //調用命名路由並返回響應
 8 instance($abstract, $object) //在容器中注冊對象實例
 9 expectsEvents($events) //指定被給定操作觸發的事件列表
10 withoutEvents() //無需觸發事件模擬事件調度
11 expectsJobs($jobs) //為特定操作執行被調度的任務列表
12 withSession(array $data) //設置session到給定數組
13 flushSession() //清空當前session中的內容
14 startSession() //開啟應用Session
15 actingAs($user) //為應用設置當前登錄用戶
16 be($user) //為應用設置當前登錄用戶
17 seeInDatabase($table, array $data, $connection = null) //斷言給定where條件在數據庫中存在
18 notSeeInDatabase($table, $array $data, $connection = null) //斷言給定where條件在數據庫中不存在
19 missingFromDatabase($table, array $data, $connection = null) //notSeeInDatabase()的別名
20 seed() //填充數據庫
21 artisan($command, $parameters = []) //執行Artisan命令並返回碼值

laravel5 提供了很多額外的斷言用於幫助編寫 web 應用的測試用例:

 1  1 assertPageLoaded($uri, $message = null) //斷言最后被加載的頁面;如果加載失敗拋出異常:$uri/$message
 2  2 assertResponseOk() //斷言客戶端返回的響應狀態碼是否是200
 3  3 assertReponseStatus($code) //斷言客戶端返回的響應狀態碼是否和給定碼值相匹配
 4  4 assertViewHas($key, $value = null) //斷言響應視圖包含給定數據片段
 5  5 assertViewHasAll($bindings) //斷言視圖包含給定數據列表
 6  6 assertViewMissing($key) //斷言響應視圖不包含給定數據片段
 7  7 assertRedirectedTo($uri, $with = []) //斷言客戶端是否重定向到給定URI
 8  8 assertRedirectedToRoute($name, $parameters = [], $with = []) //斷言客戶端是否重定向到給定路由
 9  9 assertRedirectedToAction($name, $parameters = [], $with = []) //斷言客戶端是否重定向到給定動作
10 10 assertSessionHas($key, $value = null) //斷言session包含給定鍵/值
11 11 assertSessionHasAll($bindings) //斷言session包含給定值列表
12 12 assertSessionHasErrors($bindings = []) //斷言session包含綁定錯誤
13 13 assertHasOldInput() //斷言session中包含上一次輸入

http://laravelacademy.org/post/7029.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM