開發步驟
- laravel的compser單元測試組件
- 1.用別人創建好的第三方工具包來創建一些基本的文件,比較方便,手動上一篇博客也做過了
- 2.在根目錄見一個lixiyong的文件夾,在lixiyong文件夾建一個lunit-laravel的文件夾,在lixiyong文件夾下執行cmd命令:
- 3.把基礎的調用方法的類寫好 src\Http\Controllers\LunitController.php
- 4.添加一下頁面 resources\views\index.blade.php
- 5.添加路由src\Http\routes.php
- 6.添加服務提供者 src\Providers\LunitServiceProvider.php,laravel的組件都是由服務提供者加載的
- 7.修改lunit-laravel文件夾中的composer.json,添加服務提供者的加載
- 8.cd到laravel58項目執行,注意:加載本地的組件包加上dev-master,不然會報一個錯誤
- 9.通過php artisan route:list檢測加載的路由
- 10.瀏覽器訪問http://127.0.0.1/lixiyong/laravel58/public/lunit
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組件開發完成!!!