PHPUnit错误未定义变量

Posted

技术标签:

【中文标题】PHPUnit错误未定义变量【英文标题】:PHPUnit error undefined variable 【发布时间】:2015-01-25 15:09:54 【问题描述】:

我正在运行 phpunit 来测试我的 ZF2 应用程序。我在我的 Windows 机器(在 xampp 下)上尝试了它,它运行良好。但是,当我将其移至虚拟 Ubuntu 14.10 服务器时,每次测试都会出现以下错误:

Undefined variable: services

我去/etc/php5/cli/php.ini,设置报错如下:

error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE

测试指向的代码来自我的 Module.php 文件之一

public function onBootstrap(MvcEvent $event)

    $sharedEventManager =  $event->getApplication()
        ->getEventManager()
        ->getSharedManager();

    $sharedEventManager->attach('user', 'log-fail', function($event) use ($services) 
        $username = $event->getParam('username');


        $log = $services->get('log');
        $log->warn("Error logging user [$username]");
    );

它专门抱怨$sharedEventManager->attach('user', 'log-fail', function($event) use ($services) 这一行。就像我说的,我尝试编辑 php.ini 文件来抑制这样的警告,但它不起作用。我还缺少什么吗?

【问题讨论】:

virtual Ubuntu 14.10 server 上检查您的 PHP 版本。 您显示的代码中未定义变量 $services。 我正在运行 php 5.5.12 你在 Windows 机器上的 PHP 版本是什么。 问题应该是:为什么这个测试在 Windows 上没有失败? 【参考方案1】:

好的,我想通了。正如 Indrasinh Bihola 所说:我遗漏了一部分。嗯,书做到了。我借用的 sn-p 来自较早的部分,但它跳过了关键部分,并且没有说明原始部分在哪里(37 页!)。另外,不要找借口,但我从未在 PHP 中使用过闭包,而且我不知道 use($services) 实际做了什么。现在我愿意。我不会再犯同样的错误了。

【讨论】:

但是,是的,我现在确实感觉很愚蠢,我也应该这样做。 :(

以上是关于PHPUnit错误未定义变量的主要内容,如果未能解决你的问题,请参考以下文章

当我使用标志覆盖率运行 Phpunit 时,出现错误:未定义的变量工厂

Symfony 5 Phpunit 未定义方法

PHPUnit 错误“未定义的索引:HTTP_HOST”

PHPUnit 错误:调用未定义的方法 Tests\Unit\ExampleTest::visit()

使用 PDO SQL INSERT INTO 的 PHPunit 测试函数未定义数组键错误

PHPUnit 错误致命错误:调用未定义的方法 Mock_Game_073a8e20::method()