php - 用于测试和实际数据库的 PHP Laravel SQLite
问题描述
我想将 Sqlite 驱动程序用于测试数据库和实际数据库。我的.env文件是:
DB_CONNECTION=sqlite
没关系,我可以将 sqlite 用于实际数据库并进行测试,我在config/database.php的连接数组下定义了类似的内容:
'testing' => [
'driver' => 'sqlite',
'url' => env('DATABASE_URL'),
'database' => env('DB_DATABASE', database_path('test.sqlite')),
'prefix' => '',
'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
],
'sqlite' => [
'driver' => 'sqlite',
'url' => env('DATABASE_URL'),
'database' => env('DB_DATABASE', database_path('database.sqlite')),
'prefix' => '',
'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
],
我的phpunit.xml配置也像:
<php>
<server name="APP_ENV" value="testing"/>
<server name="BCRYPT_ROUNDS" value="4"/>
<server name="CACHE_DRIVER" value="array"/>
<server name="DB_CONNECTION" value="testing"/>
<server name="DB_DATABASE" value=":memory:"/>
<server name="MAIL_MAILER" value="array"/>
<server name="QUEUE_CONNECTION" value="sync"/>
<server name="SESSION_DRIVER" value="array"/>
<server name="TELESCOPE_ENABLED" value="false"/>
</php>
然而它仍然使用我的实际数据库进行测试,我尝试在互联网上用不同的方式配置 database.php 和 phpunit.xml,但它仍然无法正常工作。
示例就像使用 mysql 作为实际,使用 sqlite 进行测试,但我想对它们都使用 sqlite。
解决方案
如果要testing.sqlite
用于测试,请注释掉<server name="DB_DATABASE" value=":memory:"/>
因此,您甚至可以使用内存数据库进行测试。
我刚刚测试了两个:
<server name="DB_DATABASE" value=":memory:"/>
它在内存中运行
注释掉<server name="DB_DATABASE" value=":memory:"/>
它使用database_path('testing.sqlite')
即使使用也没有遇到错误RefreshDatabase
我的 .env 文件的数据库相关条目如下
DB_CONNECTION=sqlite
# DB_DATABASE=database.sqlite
# DB_CONNECTION=mysql
# DB_HOST=127.0.0.1
# DB_PORT=3306
# DB_DATABASE=l8x
# DB_USERNAME=root
# DB_PASSWORD=
和phpunit.xml
<php>
<server name="APP_ENV" value="testing"/>
<server name="BCRYPT_ROUNDS" value="4"/>
<server name="CACHE_DRIVER" value="array"/>
<server name="DB_CONNECTION" value="testing"/>
<!-- <server name="DB_DATABASE" value=":memory:"/> -->
<server name="MAIL_MAILER" value="array"/>
<server name="QUEUE_CONNECTION" value="sync"/>
<server name="SESSION_DRIVER" value="array"/>
<server name="TELESCOPE_ENABLED" value="false"/>
</php>
推荐阅读
- c# - 有没有一种方法可以在 C# Unity 中返回(旋转)四元数的 y 分量?
- google-chrome - 有没有办法使用 AppleScript 使 Google Chrome 中的标签静音?
- python - 如何使用xarray从netcdf数据集中的变量中删除纬度和经度(它们是常数)?
- google-sheets - 如果特定列不为空,则 Google 表格导入范围
- node.js - 如何将 pkg 与 puppeteer 一起使用?
- solidity - 如何通过合约功能出售调用者的代币并将其发送给调用者?
- qt - 在 QT Creator 中查看 std::mutex 锁上的整个调用树
- r - 如何手动将值添加到 ggplot barplot
- typescript - nextjs、typescript、redux-saga 中 getServerSideProps 上下文部分的 typeError
- node.js - 节点从 HTML 中抓取文本