【问题标题】:Behat 3 and Laravel, testing environment not being honouredBehat 3 和 Laravel,测试环境不被尊重
【发布时间】:2014-10-25 21:41:01
【问题描述】:

我在使用 Behat 3 和 Laravel 测试 API 时遇到了一个令人困惑的问题。

似乎它没有使用“测试”环境数据库(在我的情况下是一个 sqlite 内存数据库)......但只是在某些时候。

我在 testing/database.php 文件中放置了一条日志消息,以查看它何时加载。我在运行 Behat 时确实看到了日志消息。

但是运行 Behat 功能会在我的开发数据库中添加行 - 我的一些测试由于同样的原因而失败。

我的 phpunit 测试运行良好,不会改变开发数据库。

behat.yml 中是否有我遗漏的内容?

编辑:我看到了问题 - 我正在使用 Guzzle 测试 API,而 Behat 的设置函数正在测试环境中工作,一旦 Guzzle 开始运行,应用程序就不知道它是否在测试环境中。所以我要么必须找到一种方法来告诉应用程序它在测试环境中,要么告诉 behat 使用开发环境。

【问题讨论】:

    标签: php sqlite laravel laravel-4 behat


    【解决方案1】:

    在你的FeatureContext.php 添加这个方法:

    /**
     * @BeforeSuite
     */
     public static function bootstrapLaravel()
     {
        $unitTesting = true;
        $testEnvironment = 'testing';
    
    
        require __DIR__ . '/../../../bootstrap/start.php'; // adjust this to right path. This will work if FeatureContext.php is in app/tests/acceptance
     }
    

    这将使用测试数据库并包括 Laravel(因此您也可以使用您的模型)。

    【讨论】:

      【解决方案2】:

      使用 PHPUnit,您可以在引导程序中配置环境,并且该配置将在整个测试过程中使用。使用 Behat,您会遇到不同的情况,与 PHPUnit 不同,它向服务器发出请求并且不直接与您的 PHP 代码对话。尽管对我们开发人员来说,似乎我们正在测试位于我们功能的下一个文件夹中的代码,但实际上它是通过我们的本地服务器访问的,该服务器指向该代码。换句话说,您正在处理一个远程代码,它对您的测试零暴露并且忽略(如预期的那样)配置(无论如何您都在本地代码上设置)。

      因此,要将任何配置传递给您的代码,您需要将您的服务器视为入口点。有两种基本方法 - 为您的应用程序使用两个本地域(app.dev 和 app.tst),或者让您的 app.tst 接受一些参数/cookie,告诉它它正在测试中。第一个是最好的选择,因为您没有向应用程序添加任何逻辑,并且可以通过服务器配置设置环境变量或使域指向不同的引导程序等。

      【讨论】:

      • 是的 - 我现在正在使用自己的数据库和本地 url 创建一个“接受”环境,并在 vhosts 配置中设置一个环境变量,以便在运行 Behat 测试时告诉 laravel。
      • 正确的选择。自动复制 MySql 模式的好处(尽管 Laravel 有类似的东西),稍微重构一下它就变成了一段很棒的代码:matteomattei.com/how-to-clone-mysql-database-schema-in-php
      • 我发现 SQLite 比 MySQL 快得多。想使用内存模式,但似乎无法让它在请求之间持续存在。
      • 不久前我在 SO 上看到了一些与此相关的问题,如果我没记错的话,它会在连接断开时被破坏,因此重用相同的连接可能是答案,但这可能是不可能的孤立的请求。无论如何,在SO或google上搜索,可能有一种方法可以通过配置来实现。或者提出一个新问题并用 Behat 标记,我或某人会看看。
      • 请看我的回答。这将解决在“测试”环境中运行的问题。
      猜你喜欢
      • 2012-10-12
      • 1970-01-01
      • 1970-01-01
      • 2020-03-18
      • 2020-06-10
      • 2019-07-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多