Laravel 單元測試


前言

今天是第十三周周一,雖然接下來的時間會比較忙,比如各科的課設、考試、磨錘子。但是還是有種涅槃重生的感覺,昨晚的睡眠確實不怎么樣,但是今天十分精神,已經想不起來多久沒有這么早起了~讓我累並快樂着吧!

單元測試

Laravel 中集成了PHPUnit, 測試的配置文件為根目錄下的phpunit.xml,該配置文件為我們做好了所有配置工作。

安裝

wget https://phar.phpunit.de/phpunit.phar
chmod +x phpunit.phar
sudo mv phpunit.phar /usr/local/bin/phpunit

實現簡單測試

public function testBasicExample()
{
    $this->visit('/')
         ->see('Laravel 5');
}

其中 visit 方法用於訪問指定路由頁面,see 方法則判斷返回響應中是否包含指定字符串。到項目根目錄下運行:

phpunit

或者只測試某個文件:

./vendor/phpunit/phpunit/phpunit tests/XXXTest.php

Laravel 5.1 中 Crawler 測試的方法和屬性

Crawler 意為(網絡)爬蟲,Crawler 測試允許你在 web 應用中測試頁面訪問。下面是一些 Crawler 測試中常用的屬性和方法:

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

Laravel 5.1 提供給 PHPUnit 的方法和屬性

下面是 Laravel 5.1 提供給 PHPUnit 使用的應用方法和屬性:

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

Laravel 5.1 中 PHPUnit 的斷言方法

除了標准的 PHPUnit 斷言方法(如 assertEquals()、assertContains()、assertInstanceOf() 等)之外,Laravel 5.1 還提供了很多額外的斷言用於幫助編寫 web 應用的測試用例:

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


免責聲明!

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



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