MacOS运行flutter test报错:FileSystemException只读文件系统问题
解决MacOS下Flutter测试FileSystemException(只读文件系统)问题
MacOS从Big Sur版本开始,系统根目录(/)默认是只读状态——这是系统安全机制的一部分。你在Mock中指定的/mock/temporaryPath是直接在根目录下创建路径,自然会触发权限错误。而Windows和Ubuntu的根目录默认允许普通用户写入,所以测试能正常运行。你修改当前目录权限没用,因为目标路径不在当前目录范围内。
具体解决方案
修改Mock的路径为可写目录
把Mock中的临时路径换成当前测试目录的相对路径,或者系统提供的临时目录:class MockPathProviderPlatform extends Mock implements PathProviderPlatform { @override Future<String?> getTemporaryPath() async { // 方案1:相对当前测试目录的路径 return './mock/temporaryPath'; // 方案2:使用系统临时目录(推荐,无需手动处理权限) // return '${Directory.systemTemp.path}/mock/temporaryPath'; } }测试前递归创建目标目录
即使路径合法,也要确保父目录存在,避免创建失败。在测试初始化时添加:setUp(() { final targetDir = Directory('./mock/temporaryPath'); if (!targetDir.existsSync()) { targetDir.createSync(recursive: true); } });清理测试生成的文件(可选)
为了避免测试目录积累垃圾,可以在测试结束后删除临时目录:tearDown(() { final targetDir = Directory('./mock/temporaryPath'); if (targetDir.existsSync()) { targetDir.deleteSync(recursive: true); } });
内容的提问来源于stack exchange,提问作者Raphael Pinel
相关产品推荐
相关产品推荐

