需要帮助克服与 PHP 5.3 设置的某些 behat 依赖项的不兼容性

Need help in overcoming the incompatibility of a certain behat dependencies set with a PHP 5.3

我有一个特定的 behat 配置,它有一个特定的依赖集,可以很好地与 PHP 5.5 配合使用。但后来我不得不将该配置传输到带有 jenkins 的服务器。问题是服务器安装了 PHP 5.3,无法更新。

尽管依赖项拒绝以正常方式通过 composer 安装,但我还是使用“--ignore-platform-reqs”参数强制安装了它们。

安装依赖项后,我遇到了另一个我无法轻易克服的问题。它只是在尝试执行 "bin/behat" 命令时显示错误:

 PHP Parse error:  syntax error, unexpected '[' in .../workspace/automated-tests/vendor/guzzlehttp/psr7/src/functions.php on line 77
PHP Stack trace:
PHP   1. {main}() .../workspace/automated-tests/vendor/behat/behat/bin/behat:0
PHP   2. includeIfExists() .../workspace/automated-tests/vendor/behat/behat/bin/behat:21
PHP   3. include() .../automated-tests/vendor/behat/behat/bin/behat:17
PHP   4. ComposerAutoloaderInit617eef80953ba1e8b93feeaeccb52bc0::getLoader() .../workspace/automated-tests/vendor/autoload.php:7
PHP   5. composerRequire617eef80953ba1e8b93feeaeccb52bc0() .../workspace/automated-tests/vendor/composer/autoload_real.php:49
PHP   6. require() .../workspace/automated-tests/vendor/composer/autoload_real.php:59
Parse error: syntax error, unexpected '[' in .../workspace/automated-tests/vendor/guzzlehttp/psr7/src/functions.php on line 77 Call Stack: 0.0006 645368 1. {main}() .../workspace/automated-tests/vendor/behat/behat/bin/behat:0 0.0008 645976 2. includeIfExists() .../workspace/automated-tests/vendor/behat/behat/bin/behat:21 0.0016 649328 3. include('.../workspace/automated-tests/vendor/autoload.php') .../workspace/automated-tests/vendor/behat/behat/bin/behat:17 0.0021 680968 4. ComposerAutoloaderInit617eef80953ba1e8b93feeaeccb52bc0::getLoader() .../workspace/automated-tests/vendor/autoload.php:7 0.0082 1106296 5. composerRequire617eef80953ba1e8b93feeaeccb52bc0() .../workspace/automated-tests/vendor/composer/autoload_real.php:49 0.0089 1109928 6. require('.../workspace/automated-tests/vendor/guzzlehttp/psr7/src/functions_include.php') .../automated-tests/vendor/composer/autoload_real.php:59

这是 composer.json 中的依赖项列表:

{
  "require": {
    "behat/gherkin": "~4.4",
    "drupal/drupal-extension": "~3.1",
    "emuse/behat-html-formatter": "dev-master"
  },
  "require-dev": {
    "bossa/phpspec2-expect": "~1.0",
    "ocramius/proxy-manager": "~0.5",
    "phpunit/phpunit": "~4.5",
    "jakoch/phantomjs-installer": "1.9.8"
  },
  "autoload": {
    "psr-0": {
      "Behat\Behat":    "src/",
      "Behat\Testwork": "src/"
    }
  },
  "config": {
    "bin-dir": "bin/"
  }
}

短数组语法 [] 是在 PHP 5.4 中添加的,所以我猜你是 运行 PHP 的某个旧版本在共享服务器上。通常将 [] 替换为 array() 会有所帮助,但这里是外部供应商包,因此不建议修改代码,因为更改会更新供应商包时被覆盖。除此之外,解决该问题的唯一方法是使用更新版本的 PHP.

From this related question

我找到了解决问题的方法。我已将 composer.json 中的 "require" 块更改为以下内容:

{
  "require": {
    "drupal/drupal-extension": "*",
    "emuse/behat-html-formatter": "dev-master"
  },

请注意,我已经去掉了“"behat/gherkin":”~4.4“”并将 drupal/extension 版本更改为“*”。 因此它根据我的系统规格(因此它的 PHP 5.3 兼容)下载最新和最稳定的版本以及它需要的所有依赖项(所以 behat 4 也包括在内)。

至少我是这么看的。如果我错了,请纠正我。