【问题标题】:"Bad variable name" when trying to run phpunit tests via a Makefile without deprecation warnings尝试通过 Makefile 运行 phpunit 测试而没有弃用警告时出现“错误的变量名”
【发布时间】: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=disabled和export SYMFONY_DEPRECATIONS_HELPER="disabled"。在这两种情况下,Make 目标都运行了,但显示了弃用警告,并且 Make 以代码 1 退出,这不是预期的结果。

【问题讨论】:

    标签: php unit-testing symfony makefile phpunit


    【解决方案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
      

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

      【讨论】:

        猜你喜欢
        • 2017-09-29
        • 2016-03-23
        • 1970-01-01
        • 2014-05-08
        • 1970-01-01
        • 2014-05-31
        • 1970-01-01
        • 2020-10-27
        • 2013-01-01
        相关资源
        最近更新 更多