我在Homestead-7上使用Laravel 5.5,phpunit 6.5.5(我认为)。
我正在尝试本教程:https://laravel-news.com/your-first-laravel-application(这应该会告诉你很多关于我对框架的体验)
测试失败(由于TokenMismatchException
),我设法找到APP_ENV
变量被设置为local
的根本原因,尽管我已经尝试了很多种设置方法它到testing
。
最后,让我克服这个问题的原因是设置变量如下:
APP_ENV=testing vendor/bin/phpunit
然后,测试成功完成。
我的问题是,我做错了什么?上面的hack显然不是最好的方法。必须有办法正确地做到这一点。
更新
phpunit.xml
的内容:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
backupStaticAttributes="false"
bootstrap="vendor/autoload.php"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false">
<testsuites>
<testsuite name="Feature">
<directory suffix="Test.php">./tests/Feature</directory>
</testsuite>
<testsuite name="Unit">
<directory suffix="Test.php">./tests/Unit</directory>
</testsuite>
</testsuites>
<filter>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">./app</directory>
</whitelist>
</filter>
<php>
<env name="APP_ENV" value="testing"/>
<env name="CACHE_DRIVER" value="array"/>
<env name="SESSION_DRIVER" value="array"/>
<env name="QUEUE_DRIVER" value="sync"/>
<env name="DB_CONNECTION" value="sqlite"/>
<env name="DB_DATABASE" value=":memory:"/>
</php>
</phpunit>
提前感谢您的时间。
答案 0 :(得分:5)
当通过
phpunit
运行测试时,由于testing
文件中定义的环境变量,Laravel会自动将配置环境设置为phpunit.xml
。
...所以我敢打赌你的phpunit.xml
文件丢失或配置错误。它应该在项目的根目录中,并且应该包含以下内容:
<php>
<env name="APP_ENV" value="testing"/>
...
</php>
如果你做在正确的位置有一个phpunit.xml
文件而 包含上面的部分,那么仍然不工作,然后尝试清除配置缓存:
php artisan config:clear
如果仍然无法修复它,那么我会检查phpunit.xml
文件中的奇怪内容,例如错误名称或包含语法错误。
here's a link原始phpunit.xml
文件,以帮助您在需要时恢复它。
答案 1 :(得分:1)
我设法找到了我系统的问题。在我的宅基地框中,我已经包含在全球环境变量APP_ENV的Homestead.yaml
设置中:
variables:
- key: APP_ENV
- value: local
这是作为Homestead设置说明中的示例提供的。我没有意识到我在做什么就跟着它。
再次通过.env
或phpunit.xml
设置变量不起作用。我从Homestead.yaml
中删除了定义,它的工作原理与我预期的一样。