iT邦幫忙

2022 iThome 鐵人賽

DAY 30
0
DevOps

自動化測試大作戰系列 第 30

情境題—Legacy:缺乏 Migration Files 與 Factory Files

  • 分享至 

  • xImage
  •  

Medium 清新閱讀版連結

這是本系列的最後一篇介紹文,今天讓我們探討「缺乏 Migration Files 與 Factory Files」的 Legacy 情境吧!

很多時候我們會遇到沒有 Migration Files 或 Factory Files 的 Legacy Codebase,原因大概有以下幾種:

  • 該程式庫原本不是以 Laravel 進行開發,可能是別的 PHP 框架,或甚至是別的語言,後來才改為使用 Laravel 進行開發。
  • 之前的開發者沒有使用 Migration 來建立資料庫,而是用手動的方式建立及調整資料庫架構。
  • 之前的開發者有用 Migration 來建立資料庫,但因為沒有導入自動化測試機制,因此沒有為各 Model 建立對應的 Factory Files。

以上三種情況都滿常見的,而解法也不難,甚至已有神人幫我們做成套件了。今天就讓我們來看看其中的2個套件吧!

Migration Files 生成套件

針對「缺乏的 Migration Files」 情境,kitloong/laravel-migrations-generator 這個套件可以幫助我們針對已存在資料庫,以程式的方式產生 Migration File,步驟如下:

  • 首先讓我們安裝 kitloong/laravel-migrations-generator 這個套件:

    composer require --dev "kitloong/laravel-migrations-generator"
    
  • 接著依照 Migration Files 缺乏的情境來看:

    • 假如缺乏全部的 Migration Files,此時可執行以下指令,讓 kitloong/laravel-migrations-generator 連上預設資料庫連線,並依據各資料表的欄位架構,生成對應的 Migration File:

      php artisan migrate:generate
      
    • 假如是缺乏部分的 Migration Files,則可使用指定或排除資料表的方式,來生成對應的 Migration File:

      # 假設資料庫中有 table1,table2,table3,table4,table5
      # 其中 table1, table2 已有 Migration File
      # 指定要生成的資料表
      php artisan migrate:generate --tables="table3,table4,table5"
      
      # 或是用排除的
      php artisan migrate:generate --ignore="table1,table2"
      
    • 指定 Connection:

      php artisan migrate:generate --connection="connection_name"
      

實際上它還有其他好用的模式可用,這邊只講述最重要的部分,其他的部分大家可到它的 Github 上瀏覽。

Factory Files 生成套件

針對「缺乏的 Migration Files」 情境,另一個 TheDoctor0/laravel-factory-generator 套件可幫助我們生成 Factory Files,步驟如下:

  • 首先同樣先讓我們安裝 TheDoctor0/laravel-factory-generator 這個套件:

    composer require thedoctor0/laravel-factory-generator --dev
    
  • 接著依照 Factory Files 缺乏的情境來看:

    • 假如缺乏所有 Model 的 Factory File,可以用以下指令一鍵生成:

      php artisan generate:factory
      
    • 假如是缺乏部分 Model 的 Factory File,則可使用以下指令

      # 僅生成 User 及 Company
      php artisan generate:factory User Company
      

以上就是今天的介紹,希望對大家有所幫助!

參考資料


上一篇
情境題—多重資料庫連線(二)
下一篇
結語
系列文
自動化測試大作戰31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言