 4.0 完整遷移指南:避開所有坑)
wp-browser 3.x 升級(jí) 4.0 完整遷移指南避開所有坑【免費(fèi)下載鏈接】wp-browserThe easy and reliable way to test WordPress with Codeception. 10 years of proven success.項(xiàng)目地址: https://gitcode.com/gh_mirrors/wp/wp-browserwp-browser是目前最流行的 Codeception WordPress 測(cè)試框架用它給 WordPress 插件、主題和站點(diǎn)寫自動(dòng)化測(cè)試已經(jīng)驗(yàn)證了 10 年。如果你還在用 3.x 老版本升到 4.0 并不復(fù)雜但命名空間、測(cè)試斷言、配置文件都有變化稍不注意就會(huì)踩坑。這篇 wp-browser 3.x 升級(jí) 4.0 遷移指南帶你一步步走完全部流程讓你快速無(wú)痛完成升級(jí)。一、遷移前先搞清楚3.x 與 4.0 有什么本質(zhì)區(qū)別升級(jí) wp-browser 到 4.0最核心的一刀切變化是兩個(gè)硬性環(huán)境要求維度wp-browser 3.xwp-browser 4.0PHP 版本5.68.0必須Codeceptionv4v5必須Composer API1.x 即可2.2必須命名空間tad\WPBrowser、Codeception\Modulelucatume\WPBrowser統(tǒng)一長(zhǎng)期維護(hù)? 已停止演進(jìn)? 后續(xù)所有新版本都基于 4.x一句話只要你的項(xiàng)目 PHP 是 8.0 以上就應(yīng)該直接遷移到 4.0。3.x 已經(jīng)沒(méi)有新功能了留在舊版本意味著錯(cuò)過(guò)dbUrl一鍵配置、WPLoader.dump多數(shù)據(jù)庫(kù)導(dǎo)入等大量新能力。 官方說(shuō)明wp-browser 未來(lái)的開發(fā)都發(fā)生在 4.x 上遷移是遲早要做的事不如現(xiàn)在做完。詳見(jiàn) CHANGELOG.md 中 4.0.0 版本的完整變更記錄。二、遷移前必做的 3 項(xiàng)準(zhǔn)備工作5 分鐘1. 確認(rèn) PHP 與 Codeception 版本在終端執(zhí)行以下兩條命令確認(rèn)你的環(huán)境達(dá)標(biāo)php -v # 必須是 8.0 或更高 vendor/bin/codecept -v # 需要 5.x如果 Codeception 還是 4.x先單獨(dú)升級(jí)它c(diǎn)omposer require --dev codeception/codeception:^5.02. 備份數(shù)據(jù)庫(kù)轉(zhuǎn)儲(chǔ)文件wp-browser 依賴dump.sql或 SQLite 的dump.sqlite作為測(cè)試數(shù)據(jù)快照。遷移過(guò)程不會(huì)改動(dòng)它但萬(wàn)一測(cè)試失敗需要回滾有一份備份讓你高枕無(wú)憂。3. 通讀官方遷移清單升級(jí)前 10 分鐘讀一遍倉(cāng)庫(kù)中的 docs/migration.md它就是本文所有坑點(diǎn)的官方出處本文只是把它翻譯成了可操作的清單。三、最快配置方法composer 一鍵升級(jí) wp-browser 4.0第 1 步修改 composer.json 并安裝打開項(xiàng)目根目錄的composer.json把開發(fā)依賴改為{ require-dev: { lucatume/wp-browser: ^4.0 } }然后執(zhí)行composer require --dev lucatume/wp-browser:^4.0第 2 步可選克隆源碼倉(cāng)庫(kù)研究細(xì)節(jié)如果遷移過(guò)程中想對(duì)照源碼排錯(cuò)可以克隆倉(cāng)庫(kù)到本地git clone https://gitcode.com/gh_mirrors/wp/wp-browser建議重點(diǎn)看兩個(gè)文件src/version-4-aliases.php里面列出了全部舊類名到新類名的映射表是你全局搜索替換時(shí)的字典docs/migration.md官方遷移步驟原文四、代碼改動(dòng)清單命名空間遷移是最大工作量4.0 把散落在tad\WPBrowser和Codeception兩個(gè)命名空間的類全部收編到lucatume\WPBrowser。用全局搜索替換處理對(duì)照表如下舊寫法3.x新寫法4.0用途tad\WPBrowser\...lucatume\WPBrowser\...所有工具類、輔助函數(shù)Codeception\Module\WPBrowser等lucatume\WPBrowser\Module\WPBrowser等模塊類Codeception\Command\GenerateWPUnit等lucatume\WPBrowser\Command\GenerateWPUnit等代碼生成命令Codeception\TestCase\WPTestCase等lucatume\WPBrowser\TestCase\WPTestCase等測(cè)試用例基類tad\WPBrowser\Extension\Eventslucatume\WPBrowser\Extension\EventDispatcherBridge事件橋接擴(kuò)展好消息有向后兼容的類別名兜底4.0 內(nèi)置了一套class_alias兼容層見(jiàn)src/version-4-aliases.php舊類名短期內(nèi)仍可用。但這只是過(guò)渡拐杖建議遷移完就刪干凈否則后續(xù)升級(jí)會(huì)突然斷掉。?? 坑點(diǎn)提醒tad\WPBrowser\pregErrorMessage、Patchwork/PHPUnit 相關(guān)的舊函數(shù)已被徹底移除沒(méi)有任何別名兜底用到它們會(huì)直接報(bào)函數(shù)/類不存在。五、測(cè)試用例常見(jiàn)坑廢棄處理與斷言變嚴(yán)格這是 3.x 升級(jí) 4.0 后測(cè)試莫名失敗的重災(zāi)區(qū)共 3 個(gè)坑坑 1runInSeparateProcess注解被移除4.0 不再支持 PHPUnit 的runInSeparateProcess注解。如果你的測(cè)試還在用它需要在套件配置文件如tests/functional.suite.yml中啟用隔離擴(kuò)展extensions:yaml extensions: enabled: - lucatume\\WPBrowser\\Extension\\IsolationSupport擴(kuò)展詳情見(jiàn)倉(cāng)庫(kù)文檔docs/extensions/IsolationSupport.md???2廢棄函數(shù)/類的預(yù)期申報(bào)方式變了3.x 時(shí)代靠過(guò)濾deprecated_function_trigger_error等鉤子來(lái)忍廢棄告警4.0 改用 Core PHPUnit 原生機(jī)制。老寫法全部失效換成兩個(gè)方法// 申報(bào)我知道這里用了廢棄的函數(shù)/類/文件/鉤子 $this-setExpectedDeprecated( my_deprecated_function ); // 申報(bào)我知道這里觸發(fā)了 doing_it_wrong $this-setExpectedIncorrectUsage( my_doing_it_wrong );同時(shí)直接改$this-expected_deprecated[]屬性數(shù)組的老寫法也要一并改掉——屬性訪問(wèn)已被移除???3斷言類型檢查變嚴(yán)格新版 PHPUnit 核心的部分?jǐn)嘌匀鏰ssertEqualFields會(huì)檢查參數(shù)類型。如果你習(xí)慣數(shù)組對(duì)象混著傳會(huì)突然失敗。顯式轉(zhuǎn)換類型即可$this-assertEqualFields( (object) [ a 1 ], [ a 1 ] );六、配置文件必改項(xiàng)codeception.yml 命令與模塊更新打開項(xiàng)目根目錄的codeception.yml注意不是套件配置把extensions.commands里的舊命令全部換成新命名空間并補(bǔ)上新命令extensions: commands: - lucatume\\WPBrowser\\Command\\GenerateWPUnit - lucatume\\WPBrowser\\Command\\GenerateWPRestApi - lucatume\\WPBrowser\\Command\\GenerateWPRestController - lucatume\\WPBrowser\\Command\\GenerateWPRestPostTypeController - lucatume\\WPBrowser\\Command\\GenerateWPAjax - lucatume\\WPBrowser\\Command\\GenerateWPCanonical - lucatume\\WPBrowser\\Command\\GenerateWPXMLRPC # 4.0 新增命令建議一并啟用 - lucatume\\WPBrowser\\Command\\RunOriginal - lucatume\\WPBrowser\\Command\\RunAll - lucatume\\WPBrowser\\Command\\DbExport - lucatume\\WPBrowser\\Command\\DbImport命令源碼在src/Command/目錄下每個(gè)文件對(duì)應(yīng)一個(gè)命令類想深入了解可逐個(gè)查看。WPLoader 模塊配置刪舊用新檢查codeception.yml中WPLoader的配置鍵4.0 有明確的廢棄/新增清單?刪除installationTableHandling、skipPluggables、wpDebug、isolatedInstall4.0 中安裝永遠(yuǎn)隔離此參數(shù)無(wú)意義??替換activatePlugins→ 改用plugins參數(shù)指定即自動(dòng)激活推薦dbUrl一個(gè) URL 配齊庫(kù)名/用戶/密碼/主機(jī)如mysql://user:passhost:3306/db、dump安裝后、首測(cè)前自動(dòng)導(dǎo)入一個(gè)或多個(gè)轉(zhuǎn)儲(chǔ)文件、template/stylesheet模板與外觀分開指定WPLoader模塊源碼見(jiàn)src/Module/WPLoader.php配置項(xiàng)的默認(rèn)值都寫在里面。七、遷移驗(yàn)證跑通全部測(cè)試的完整流程改完配置和代碼后按這個(gè)順序驗(yàn)證能最快定位殘留問(wèn)題冒煙測(cè)試vendor/bin/codecept run --help確認(rèn)新命令wp:db:export、wp:db:import出現(xiàn)在命令列表里單元套件vendor/bin/codecept run unit——最快、不碰 WordPress 本體功能套件vendor/bin/codecept run functional——覆蓋 WPDb、WPFilesystem 等模塊端到端套件vendor/bin/codecept run acceptance如有 WebDriver 測(cè)試如果第 2 步就能通過(guò)說(shuō)明命名空間遷移基本干凈失敗信息里出現(xiàn) Class not found 或 Function tad\WPBrowser\xxx not found 時(shí)回到第四節(jié)的對(duì)照表逐個(gè)替換。八、避坑清單6 個(gè)高頻問(wèn)題速查#癥狀原因與解法1Class Codeception\Module\WPLoader not found模塊類命名空間未更新見(jiàn)第四對(duì)照表2測(cè)試隨機(jī)互相串味、nonce 沖突新 Core PHPUnit 套件清理全局狀態(tài)更徹底在測(cè)試?yán)镲@式設(shè)置所有依賴的全局變量3runInSeparateProcess無(wú)效改用IsolationSupport擴(kuò)展見(jiàn)第五節(jié)坑 14廢棄告警導(dǎo)致測(cè)試失敗用setExpectedDeprecated()/setExpectedIncorrectUsage()申報(bào)5assertEqualFields等斷言報(bào)類型錯(cuò)誤顯式類型轉(zhuǎn)換后再斷言6升級(jí)后WPCLI模塊命令偶發(fā)報(bào)錯(cuò)4.0 的 WPCLI 模塊改用嚴(yán)格參數(shù)解析把字符串命令改為數(shù)組格式傳參更穩(wěn)妥九、遷移完成后的收尾檢查最后用 3 分鐘做一遍收尾把兼容拐杖全部拆除? 全局搜索tad\WPBrowser和Codeception\Command\GenerateWP確認(rèn)命中為 0? 全局搜索expected_deprecated、expected_doing_it_wrong確認(rèn)沒(méi)有直接改屬性的殘留?composer update --lock提交新的鎖文件? CI 流水線跑一次完整套件確認(rèn)綠燈到這里你的 wp-browser 就完成從 3.x 到 4.0 的全部遷移了。整個(gè)流程核心就是四件事升 Composer 依賴 → 換命名空間 → 改測(cè)試用例的廢棄申報(bào) → 更新 codeception.yml。照這份清單走基本不會(huì)踩到任何隱藏的坑。【免費(fèi)下載鏈接】wp-browserThe easy and reliable way to test WordPress with Codeception. 10 years of proven success.項(xiàng)目地址: https://gitcode.com/gh_mirrors/wp/wp-browser創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考