【问题标题】:Laravel 5 testing environment not getting set in Codeception unit testsLaravel 5 测试环境未在 Codeception 单元测试中设置
【发布时间】:2015-04-08 00:41:25
【问题描述】:

我正在使用 Laravel 5 和 Codeception,我想使用内存中的 SQLite 数据库进行单元测试,但是,我似乎无法在 Codeception 中将我的环境设置为“测试”。我正在使用 Laravel5 模块,并在我的 unit.suite.yml 文件中定义了以下内容:

class_name: UnitTester
modules:
    enabled: [Asserts, UnitHelper, Laravel5]
    config:
        Laravel5:
            environment_file: .env.testing

我有一个定义所有本地设置的 .env 文件,然后是一个定义所有测试特定设置的 .env.testing 文件。但是,它似乎从来没有真正正确地设置环境。

为了测试我刚刚做的环境:

$this->assertEquals('testing', \App::environment());

我总是得到:

Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'testing'
+'local'

有人知道我做错了什么吗?

【问题讨论】:

    标签: php unit-testing laravel laravel-5 codeception


    【解决方案1】:

    您是否在.env.testing 文件中设置了环境名称?

    APV_ENV=testing
    

    【讨论】:

    • 是的,我在 .env.testing 文件中设置了该设置以及所有其他特定于测试的变量(相信我,我已经检查并仔细检查了很多次!)
    • 那么它是否会从您的.env.testing 文件中加载任何 数据?
    • 好的,这很奇怪......显然所有变量都从 .env.testing 正确加载,除了 APP_ENV。即使我将其设置为“测试”,它仍然显示为“本地”...感谢您让我检查一下,因为我可能不会对此进行调查。知道为什么会这样吗?
    • 这里有一些解决方案:stackoverflow.com/questions/31061888/…
    • 聚会迟到了,但 APP_ENV 可能在您的 .env.testing 文件中设置为本地!
    【解决方案2】:

    这可能是因为您在全局代码接收配置中定义了 env 文件。在项目根目录的 codeception.yml 文件中检查参数的值,应该类似于以下内容

    params:
        - .env.testing
    

    【讨论】:

      【解决方案3】:

      我对 laravel 完全陌生,但只是发现在我的本地机器上运行测试的唯一方法(例如)Codeship,是在我需要时符号链接 .env。 (我知道 - 这不是一个非常干净的方法,但是嘿,它有效

      我的本​​地 .env 文件旁边有:

      #.env.testing
      APP_ENV=testing
      DB_CONNECTION=default_mysql
      DB_DATABASE=test_db
      ... etc
      

      还有:

      #.env.codeship
      APP_ENV=codeship
      DB_CONNECTION=codeship
      

      对于本地测试,我做了一个别名:

      alias pl='rm .env; ln -s .env.testing .env; phpunit; rm .env; ln -s .env.local .env'
      

      .env.local 保存我的本地 .env 文件的副本。

      对于 Codeships 测试管道:

      ln -s .env.codeship .env
      php artisan migrate --seed
      phpunit
      

      数据库配置:

      // CODESHIP
      'codeship' => [
          'driver' => 'mysql',        
          'username' => getenv('MYSQL_USER'),
          'password' => getenv('MYSQL_PASSWORD'),
          // etc        
      ],
      
      // LOCAL DEV // PHPUNIT
      'default_mysql' => [
          'driver' => 'mysql',
          'username' => env('DB_USERNAME', 'localhost'),
          'password' => env('DB_PASSWORD', 'forge'),
          // etc        
      ],
      

      如果有人有更好的想法,我很高兴听到。

      【讨论】:

        猜你喜欢
        • 2021-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-09
        • 2016-08-10
        • 1970-01-01
        相关资源
        最近更新 更多