我有一个有效的测试套件,但是我的本地环境有两件事情发生了变化。 1)我已将Homestead升级到版本7和2)我已将我的应用程序升级到Laravel 5.6。
现在我遇到了PHPUnit耗尽内存分配的问题,除非我将ini_set('memory_limit', '1024M');
添加到createApplication
方法的开头。然后我的测试套件进一步发展,但最终完全失速。
奇怪的是,如果我运行测试,套件会在隔离的情况下停止运行。事实上,如果我只测试整个文件,可能包含10个测试,那么测试全部通过。它只会在试图一次性测试整个套件时停止......
就好像在测试之间没有清理它只是填满内存和冻结。
但我使用默认的TestCase tearDown
方法:
/**
* Clean up the testing environment before the next test.
*
* @return void
*/
protected function tearDown()
{
if ($this->app) {
foreach ($this->beforeApplicationDestroyedCallbacks as $callback) {
call_user_func($callback);
}
$this->app->flush();
$this->app = null;
}
$this->setUpHasRun = false;
if (property_exists($this, 'serverVariables')) {
$this->serverVariables = [];
}
if (property_exists($this, 'defaultHeaders')) {
$this->defaultHeaders = [];
}
if (class_exists('Mockery')) {
if ($container = Mockery::getContainer()) {
$this->addToAssertionCount($container->mockery_getExpectationCount());
}
Mockery::close();
}
if (class_exists(Carbon::class)) {
Carbon::setTestNow();
}
$this->afterApplicationCreatedCallbacks = [];
$this->beforeApplicationDestroyedCallbacks = [];
Artisan::forgetBootstrappers();
}
根据我的理解,重置测试之间的所有内容。
我在内存中使用sqlite作为我的测试数据库。
升级后有其他人遇到问题吗?
我最终走到了最底层。这是PHP 7.2的一个问题。降级到7.1并且所有测试都没有通过默认内存限制。