iT邦幫忙

2021 iThome 鐵人賽

DAY 15
0

我們之前做的單元測試,
比較接近針對API的測試,
那我們現在要開始針對網頁來做測試,
我們首先針對首頁來做單元測試,
我們先看一下我們的首頁
https://ithelp.ithome.com.tw/upload/images/20210916/20105694KOIRlIzTLw.png

然後我們寫了一個單元測試在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
https://ithelp.ithome.com.tw/upload/images/20210916/20105694AjK4c28xDL.png

怎麼會這樣呢?
跟說好的不一樣啊!

當我們遇到問題的時候,
首先就是先去找谷哥聊天,
然後他就跟我說(參見:Upgrade Guide)
這種方法只用到Laravel 5.3而已,
要改用browser-kit-testing,
所以我們就安裝了這個套件
composer require --dev laravel/browser-kit-testing
https://ithelp.ithome.com.tw/upload/images/20210916/20105694S4MGMQz8wT.png

然後在 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
https://ithelp.ithome.com.tw/upload/images/20210916/20105694sqxKKl6anV.png

然後我們的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
https://ithelp.ithome.com.tw/upload/images/20210916/2010569440lffpnzIk.png

終於通過測試了!


上一篇
[Day 14] 簡單的單元測試實作(八)-修改成API來呼叫
下一篇
[Day 16] 針對網頁的單元測試(二)
系列文
當拉拉肉遇到單元測試,是否能夠擦出命運的火花?31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言