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

标签 php sqlite laravel laravel-4 behat

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

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

我在testing/database.php 文件中放入了一条日志消息,以查看其加载时间。并且在运行 Behat 时我确实看到了该日志消息。

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

我的 phpunit 测试运行良好并且不会更改开发数据库。

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

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

最佳答案

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

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

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

相关文章:

laravel - 在 Laravel artisan 命令中使用详细信息

jquery - "Undefined index: data"

php - php 使用什么字符表示高基数?

java - Apache Tomcat 8 不工作。抛出 HTTP 状态 500 - java.lang.ClassNotFoundException : org. apache.jsp.index_jsp

java - 如何比较sqlite列?

sql - 为什么 SQL DISTINCT 不能与 ORDER BY CAST 一起使用?

php - laravel mysql 查询生成器

php - MySQL 数据库迁移失败

php - 使用谷歌地图在我的数据库中搜索邮政编码

iphone - 无法使用 iOS 将数据插入 sqlite3 数据库