PestPHP 1.21运行测试失败,报“Exclusive locks are not supported for this stream”错误
解决PestPHP运行报错
Exclusive locks are not supported for this stream的方法 检查文件系统兼容性
这个错误大概率出现在不支持文件独占锁的文件系统上,比如NFS共享目录、SMB挂载盘、WSL下的Windows原生目录等。如果项目放在这类路径下,将代码迁移到本地原生文件系统(如Linux的ext4、Windows的NTFS)后重新测试。禁用Pest的文件锁功能
Pest的进程管理逻辑依赖文件锁,可通过两种方式禁用:- 临时生效:运行测试时携带环境变量
PEST_DISABLE_FILE_LOCK=true ./vendor/bin/pest - 永久配置:在项目根目录创建
pest.php,添加以下代码<?php use Pest\Pest; Pest::configure()->disableFileLock();
- 临时生效:运行测试时携带环境变量
更新Pest到同分支最新版本
1.21分支的后续小版本可能修复了锁相关兼容问题,执行更新命令:composer update pestphp/pest --with-all-dependencies验证环境锁功能
创建测试脚本test-lock.php,检查当前环境是否支持文件锁:<?php $file = fopen(__DIR__ . '/temp.lock', 'w'); if (flock($file, LOCK_EX | LOCK_NB)) { echo "文件锁可用\n"; flock($file, LOCK_UN); } else { echo "文件锁不可用:" . error_get_last()['message'] . "\n"; } fclose($file); unlink(__DIR__ . '/temp.lock');运行
php test-lock.php,若同样报错,需调整环境(比如更换文件系统、修改PHP流配置)。强制单进程运行测试
并行测试可能触发锁冲突,尝试单进程模式:./vendor/bin/pest --parallel=1
内容的提问来源于stack exchange,提问作者Willower
相关产品推荐
相关产品推荐

