Laravel测试配置内存数据库提示Access denied for user错误如何解决
问题核心原因
你出现报错的根本原因是配置不匹配::memory:是SQLite数据库专属的内存数据库配置参数,而你在phpunit.xml中将DB_CONNECTION指定为了mysql,MySQL并不支持:memory:内存库写法,会直接将:memory:识别为一个真实存在的物理数据库名,尝试访问时由于你没有提前创建该名称的库,就会抛出权限不足的错误。
解决方案
你可以根据需求选择以下任意一种方案修正配置:
方案1:使用SQLite内存数据库做测试(推荐,测试运行速度更快)
修改phpunit.xml中<php>节点下的数据库连接配置即可:
<!-- 把原来的mysql连接改为sqlite --> <server name="DB_CONNECTION" value="sqlite"/> <!-- 保留内存库配置 --> <server name="DB_DATABASE" value=":memory:"/>
无需额外创建数据库,RefreshDatabase trait会自动处理内存库的迁移和清理。
方案2:继续使用MySQL做测试
如果必须用MySQL环境跑测试,需要提前在你的Docker部署的MySQL实例中新建一个专属测试库,例如命名为apartment_management_test,再修改phpunit.xml配置:
<!-- 保留mysql连接配置 --> <server name="DB_CONNECTION" value="mysql"/> <!-- 改为你新建的测试库名称 --> <server name="DB_DATABASE" value="apartment_management_test"/> <!-- 建议补充测试库的账号密码配置,和你MySQL的权限配置匹配 --> <server name="DB_USERNAME" value="你的测试库账号"/> <server name="DB_PASSWORD" value="你的测试库密码"/>
该方案下RefreshDatabase会自动迁移、重置测试库数据,不会影响你的正常开发库数据。
内容的提问来源于stack exchange,提问作者simpsons3
相关产品推荐
相关产品推荐

