我們之前做的單元測試,
比較接近針對API的測試,
那我們現在要開始針對網頁來做測試,
我們首先針對首頁來做單元測試,
我們先看一下我們的首頁
然後我們寫了一個單元測試在MyFirstUnitTest.php
public function test_first_page_laravel()
{
$this->visit('/')
->see('Laravel')
->dontSee('Rails');
}
這個意思是說我們預期首頁應該會有Laravel這個字,
然後不應該會有Rails這個字
那我們來執行看看
php vendor/phpunit/phpunit/phpunit tests/Feature/MyFirstUnitTest.php
怎麼會這樣呢?
跟說好的不一樣啊!
當我們遇到問題的時候,
首先就是先去找谷哥聊天,
然後他就跟我說(參見:Upgrade Guide)
這種方法只用到Laravel 5.3而已,
要改用browser-kit-testing,
所以我們就安裝了這個套件
composer require --dev laravel/browser-kit-testing
然後在 composer.json
檔案裡面,
在 autoload-dev
標籤底下新增 psr-4
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
}
}
然後在tests資料夾底下新增一個BrowserKitTestCase.php
<?php
namespace Tests;
use Illuminate\Contracts\Console\Kernel;
use Laravel\BrowserKitTesting\TestCase as BaseTestCase;
abstract class BrowserKitTestCase extends BaseTestCase
{
/**
* The base URL of the application.
*
* @var string
*/
public $baseUrl = 'http://localhost';
/**
* Creates the application.
*
* @return \Illuminate\Foundation\Application
*/
public function createApplication()
{
$app = require __DIR__.'/../bootstrap/app.php';
$app->make(Kernel::class)->bootstrap();
return $app;
}
}
然後我發現BrowserKitTestCase沒辦法是用我們之前測試的Case,
所以針對網頁的測試我們就另外加一個測試類別
php artisan make:test BrowserUnitTest
然後我們的BrowserUnitTest.php繼承BrowserKitTestCase.php
<?php
namespace Tests\Feature;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
use Tests\BrowserKitTestCase;
class BrowserUnitTest extends BrowserKitTestCase
{
public function test_first_page_laravel()
{
$this->visit('/')
->see('Laravel')
->dontSee('Rails');
}
}
再執行一次測試
php vendor/phpunit/phpunit/phpunit tests/Feature/BrowserUnitTest.php
終於通過測試了!