尝试通过 Makefile 运行 phpunit 测试而没有弃用警告时出现“错误的变量名”

Posted

技术标签:

【中文标题】尝试通过 Makefile 运行 phpunit 测试而没有弃用警告时出现“错误的变量名”【英文标题】:"Bad variable name" when trying to run phpunit tests via a Makefile without deprecation warnings 【发布时间】:2021-08-04 21:05:40 【问题描述】:

我有一个名为 test 的 Make 目标。它看起来像这样:

test:
    /var/www//vendor/bin/phpunit

我想设置一个在提交前运行所有测试的 git 钩子。为了做到这一点而不会因弃用警告而停滞不前,我想让我的钩子运行一个不同的 Make 目标。它看起来像这样:

test-automated:
    export SYMFONY_DEPRECATIONS_HELPER = disabled
    /var/www//vendor/bin/phpunit

但是,当我尝试运行此目标时,我收到以下错误消息:

export SYMFONY_DEPRECATIONS_HELPER = "已禁用" /bin/sh: export: line 1: : bad variable name make: *** [Makefile:14: test-automated] 错误 2

如何使 Make 和 PHPUnit 在没有弃用警告的情况下运行?

附录:我也试过export SYMFONY_DEPRECATIONS_HELPER=disabledexport SYMFONY_DEPRECATIONS_HELPER="disabled"。在这两种情况下,Make 目标都运行了,但显示了弃用警告,并且 Make 以代码 1 退出,这不是预期的结果。

【问题讨论】:

【参考方案1】:

这并不是对我提出的问题的直接回答,但我发现这是可行的:

test-automated:
    SYMFONY_DEPRECATIONS_HELPER=disabled /var/www//vendor/bin/phpunit

如果有人有更好的答案,我会留下问题。

【讨论】:

【参考方案2】:

你的答案是正确的。

makefile 配方是一个shell 脚本,配方的内容必须是有效的shell 语法;它不能是 makefile 语法。在 shell 中,变量赋值不能在等号周围有空格;如果你在 shell 提示符中输入:

$ export foo = bar

这不是将变量 foo 分配给值 bar 并导出它;即尝试导出名为 foo=bar 的 3 个变量,而 = 不是有效的 shell 变量名称,因此您会收到此错误。

您对export SYMFONY_DEPRECATIONS_HELPER=disabled 所做的更改是正确的。

它不起作用的原因是配方中的每个逻辑行都在 单独的 shell 中运行。因此,在一个逻辑行上分配变量然后在另一个逻辑行中运行程序是行不通的:第一行上的分配一旦该 shell 退出就会丢失。

您可以使用以下任何一种:

test-automated:
        SYMFONY_DEPRECATIONS_HELPER=disabled /var/www//vendor/bin/phpunit

正如你所做的那样或(IMO 不太好,但会起作用):

test-automated:
        export SYMFONY_DEPRECATIONS_HELPER=disabled; \
          /var/www//vendor/bin/phpunit

通过在末尾添加; \,您将这两条物理线组合成一条逻辑线。

【讨论】:

以上是关于尝试通过 Makefile 运行 phpunit 测试而没有弃用警告时出现“错误的变量名”的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用Internet Explorer 11 / IE11运行Codeception / Selenium时的PHPUnit_Framework_Exception

在 Laravel 8 中运行多个 PHPUnit 测试时出错

Laravel 项目运行 phpunit 测试结果只显示点号

如何从 Windows 命令提示符在 Laravel 中运行 PHPUnit

vendor/bin/phpunit 不适用于 Lumen

为啥通过 PhpUnit 运行测试时找不到我的自定义 TestCase 类?