寫一個laravel的composer單元測試組件

laravel的compser單元測試組件

1.用別人創建好的第三方工具包來創建一些基本的文件,比較方便,手動上一篇博客也做過了

composer global require "overtrue/package-builder" --prefer-source
package-builder build [目標目錄名]

2.在根目錄見一個lixiyong的文件夾,在lixiyong文件夾建一個lunit-laravel的文件夾,在lixiyong文件夾下執行cmd命令:

package-builder build lunit-laravel
'git' is not recognized as an internal or external command,
operable program or batch file.
Name of package (example: foo/bar): lixiyong/lunit-laravel
Namespace of package [Lixiyong\LunitLaravel]:
Description of package: A simplified version of the laravel framework unit test
Author name of package [lixiyong]:
Author email of [email protected]
License of package [MIT]:
Do you want to test this package ? [Y/n]:
Do you want to use php-cs-fixer format your code ? [Y/n]:
Standard name of php-cs-fixer [symfony]:
Package lixiyong/lunit-laravel created in: ./lunit-laravel

3.把基礎的調用方法的類寫好 src\Http\Controllers\LunitController.php

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2019/11/10 0010
 * Time: 7:47
 */

namespace Lixiyong\LunitLaravel\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Routing\Controller;

/**
 * use Illuminate\Routing\Controller 這是laravel的基類控制器
 * index() 訪問測試的頁面
 * store() 是表示用來執行需要測試的方法
 */

class LunitController extends Controller
{
    public function index()
    {
        return view('lunit::index');
    }

    public function store(Request $request)
    {
        $namespace = $request->input('namespace');
        $className = $request->input('className');
        $action    = $request->input('action');
        $param     = $request->input('param');
        $class = ($className == "") ? $namespace : $namespace.'\\'.$className;
        //要替換的值 需要的結果
        $class = str_replace("/","\\",$class);
        $object = new $class();
        $param = ($param=="") ? [] : explode('|',$param);
        $data = call_user_func_array([$object,$action],$param);
        return (is_array($data)) ? json_encode($data) : dd($data);
    }
}

4.添加一下頁面 resources\views\index.blade.php

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
  </head>

  <body>
      <h1>不區分大小寫(可以自行完善)</h1>
      <br>
      <form class="" action="{{route('lunit.store')}}" method="post">
        <input type="hidden" name="_token" value="{{ csrf_token() }}">
    命名空間:<input type="text" value='' style="width:300px" name='namespace' placeholder="如:app\index\controller 或app\index\controller\Index">可以寫全,然後下面類名不用些 <br>
    類名:<input type="text" name='className' placeholder="如:index ">命名空間全可以不用寫<br>
    測試方法名:<input type="text" name='action' placeholder="index"><br>
    傳遞參數以 | 分割:<input type="text" placeholder="如: 1|2|3" name='param'><br>
        <input type="submit" name="" value="測試"/>
      </form>
  </body>
</html>

對應項目目錄,laravel58是一個laravel5.8的項目,自己去GitHub下載即可,laravelnew暫時沒作用
在這裏插入圖片描述

5.添加路由src\Http\routes.php

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2019/11/10 0010
 * Time: 8:06
 */
Route::get('/','LunitController@index');
Route::post('/','LunitController@store')->name('lunit.store');
// 測試路由
Route::get('test', 'TestController@index');

6.添加服務提供者 src\Providers\LunitServiceProvider.php,laravel的組件都是由服務提供者加載的

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2019/11/10 0010
 * Time: 8:08
 */
namespace Lixiyong\LunitLaravel\Providers;

use Illuminate\Support\Facades\Route;
use Illuminate\Support\ServiceProvider;

class LunitServiceProvider extends ServiceProvider
{
    public function boot()
    {
        $this->registerRoutes();
        $this->loadViewsFrom(
            __DIR__.'/../../resources/views','lunit'
        );
    }

    private function routeConfiguration()
    {
        return [
          'namespace'=>'Lixiyong\LunitLaravel\Http\Controllers',
            'prefix'=>'lunit',
            'middleware' => 'web',
        ];
    }

    private function registerRoutes()
    {
        Route::group($this->routeConfiguration(),function (){
            $this->loadRoutesFrom(__DIR__.'/../Http/routes.php');
        });
    }
}

7.修改lunit-laravel文件夾中的composer.json,添加服務提供者的加載

這一步有兩個方法,推薦第1種:
方法1:修改lunit-laravel文件夾中的composer.json,添加一項extra,具體如下:

{
    "name": "lixiyong\/lunit-laravel",
    "description": "A simplified version of the laravel framework unit test",
    "license": "MIT",
    "authors": [
        {
            "name": "lixiyong",
            "email": "[email protected]"
        }
    ],
    "require": {},
    "autoload": {
        "psr-4": {
            "Lixiyong\\LunitLaravel\\": "src"
        }
    },
    "extra": {
        "laravel": {
            "providers": [
                "Lixiyong\\LunitLaravel\\Providers\\LunitServiceProvider"
            ]
        }
    }
}

方法2:在laravel58中的config/app.php中添加對於這個服務提供者的加載
在這裏插入圖片描述

8.cd到laravel58項目執行,注意:加載本地的組件包加上dev-master,不然會報一個錯誤

composer config repositories.lixiyong path ../lunit-laravel
composer require lixiyong/lunit-laravel:dev-master

9.通過php artisan route:list檢測加載的路由

在這裏插入圖片描述

10.瀏覽器訪問http://127.0.0.1/lixiyong/laravel58/public/lunit

在這裏插入圖片描述
這樣一個laravel的composer組件開發完成!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章