【问题标题】:Laravel tests fail if there are too many如果太多,Laravel 测试会失败
【发布时间】:2014-01-05 02:09:26
【问题描述】:

我正在将一个 laravel 3 站点升级到 laravel 4,并在进行过程中为它编写单元测试。效果很好,到目前为止,我在大约 20 个测试用例中进行了大约 300 个测试,并且每个测试都可以单独运行。直到最近,它们都可以很好地一起运行,但我似乎已经越过了某个阈值,在没有以下错误的情况下我无法一次性运行更多测试:

PHP Fatal error:  Illuminate\Filesystem\Filesystem::getRequire(): Failed opening required '/Users/Me/Desktop/Repos/API-2/app/config/api.php' (include_path='.:/Applications/MAMP/bin/php/php5.4.4/lib/php') in /Users/Me/Desktop/Repos/API-2/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php on line 53

几乎每一个测试都使用了未能包含的配置文件,并且由于所有测试用例在单独运行时都能正常工作,我不明白为什么只有当它们一起运行时才会发生此错误。

此错误显示测试接近完成时,所以我的第一个问题是内存或执行时间限制,我尝试在 php.ini 中将它们加倍,但我认为它们无论如何都不适用于 CLI?我不确定还有什么可能导致这样的问题,只有当所有这些都一起运行时才会发生?

编辑

没有人知道是什么原因造成的吗? 目前我能做的最好的运行所有测试是下面的 bash 脚本,然后滚动结果页面寻找错误......

#!/bin/bash
for f in app/tests/*Test.php ; do phpunit "$f" ; done

【问题讨论】:

  • 您是否尝试过使用--process-isolation 选项? phpunit.de/manual/3.7/en/textui.html
  • 我假设我会执行 phpunit --process-isolation?我不确定我是否做错了,因为当我这样做时每个测试都失败了:/ Constant LARAVEL_START already defined
  • 编辑项目目录下的phpunit.xml,设置值为true
  • 不幸的是,当我这样做时,每次测试都会出现同样的错误。
  • 只是一个快速的,你是否 100% 确定你要找的是 api.php 而不是 app.php?

标签: php unit-testing laravel-4


【解决方案1】:

假设这是在基于 *nix 的系统上,这听起来很像 ulimit 问题(打开文件限制)。

分别检查ulimit -nulimit -Hn 的输出以了解软打开文件限制和硬打开文件限制。如果它非常小,比如 1024,你可能想要增加它。

见:How do I change the number of open files limit in Linux?

还要注意,这些限制是针对每个用户的,而不是全局的,因此请确保以运行单元测试的用户身份运行它。

编辑:由 errant.info 的答案修复:https://superuser.com/questions/302754/increase-the-maximum-number-of-open-file-descriptors-in-snow-leopard 因为 MacOSX 是……特别的。

【讨论】:

  • 感谢 Tasos,这是在 Mac 上,但是当我运行 ulimit -nulimit -Hn 时,它们都返回 unlimited,所以看起来这不是问题?
  • 只是为了仔细检查,您以 Malk 的身份运行了这个 - 运行单元测试的同一用户?
  • 我想我发现了别的东西。 MacOSX 是……特别的。我的(10.6/64 位)ulimit -n 表示 2560,而launchctl limit maxfiles 表示 256|无限。不确定它遵守的是哪一个,但值得一试。这真的,真的听起来像一个打开的文件限制。你能检查一下launchctl limit的输出吗?查找 maxfiles 行,如果它们都不是无限的,则设置为 launchctl limit maxfiles unlimited unlimited(如果不允许您这样做,则设置为高值)
  • 是的,我以 Malk 的身份运行这一切。 launchctl limitmaxfiles 256 unlimited,我尝试将其更改为无限制,但两者都需要一个 int,所以我将它们都更改为 4096,但在同一个地方出现相同的错误:(我也无法更改第二个值回到无限,即使使用 sudo :/
  • 还有一圈让你跳过:你能试试 errant.info 对这个问题的回答吗:superuser.com/questions/302754/… 并在重启后重试? (还备份任何更改的文件)如果这也不起作用,我没有更多的想法,对不起。
猜你喜欢
  • 2018-11-07
  • 2016-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多