gpt4 book ai didi

php - Behat 3 和 Laravel,测试环境不被尊重

转载 作者:行者123 更新时间:2023-12-03 17:43:43 26 4
gpt4 key购买 nike

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

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

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

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

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

behat.yml 中是否有我错过的内容?

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

最佳答案

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

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

关于php - Behat 3 和 Laravel,测试环境不被尊重,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25609579/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com