【问题标题】:Environment variable not found: "DATABASE_URL" when running phpunit [duplicate]找不到环境变量:运行phpunit时的“DATABASE_URL”[重复]
【发布时间】:2018-07-05 15:27:26
【问题描述】:

我已经实现了一个简单的测试来检查页面是否显示在我的应用程序中:

namespace App\Tests\Controller;

use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;

class MyControllerTest extends WebTestCase
{
    public function testMyAction()
    {
        $client = static::createClient();
        $client->request('GET', '/');
        $this->assertEquals(200, $client->getResponse()->getStatusCode());
    }
}

当我运行 php vendor/phpunit/phpunit/phpunit 时,我收到以下错误消息:

1) App\Tests\Controller\MyControllerTest::testMyAction
Symfony\Component\DependencyInjection\Exception\EnvNotFoundException:
Environment variable not found: "DATABASE_URL".

不过,这个变量在.env 中可用。我该如何解决这个问题?

【问题讨论】:

  • 你在使用 docker 来运行你的测试吗?
  • 这是一个确定的信号,表明您在某处引入了紧耦合。单元测试应该在与系统其他部分完全隔离的情况下测试单元。如果您的单元测试在没有设置特定环境变量的情况下无法运行,那么这意味着它并没有真正孤立地测试一个单元。 static::createClient() 是您的问题所在的主要候选人
  • 还应该注意的是,一般来说,您并不打算对控制器进行单元测试。它们并不意味着包含任何需要测试的有意义的业务逻辑,并且仅作为粘合逻辑。如果您觉得控制器测试足够复杂以至于需要进行单元测试,这可能是一种称为“胖控制器”的反模式的味道,其中控制器包含真正属于其他地方的业务逻辑
  • 我没有使用 docker。
  • @GordonM - 仅供参考,这不是单元测试。这是一个功能测试。 symfony.com/doc/current/testing.html#functional-tests

标签: php symfony phpunit environment-variables


【解决方案1】:

我找到了解决方案,它必须在phpunit.xml.dist 中定义,在<php> 部分中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-03
    • 2019-01-15
    • 2021-04-26
    • 2016-07-11
    • 2013-04-17
    • 2015-11-08
    • 1970-01-01
    相关资源
    最近更新 更多