Laravel 單元測試

前言

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

單元測試

Laravel 中集成了PHPUnit, 測試的配置文件爲根目錄下的phpunit.xml,該配置文件爲咱們作好了全部配置工做。laravel

安裝

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 方法則判斷返回響應中是否包含指定字符串。到項目根目錄下運行:web

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 使用的應用方法和屬性:cookie

$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中包含上一次輸入
相關文章
相關標籤/搜索