Search code examples
phpcakephpcomposer-phptravis-cicakephp-2.x

How to autoload Composer packages in CakePHP 2 Travis integration


I'm working on a CakePHP 2.x plugin that uses Composer to pull in a package dependency. I am now trying to use the Friends of Cake's Travis package to automatically run my unit tests whenever the plugin's repository is updated.

As far as I can tell this does not include the Composer autoload file required for loading in my vendor files. As a result my tests fail as the class defined in the third-party package is missing.

As described in CakePHP 2's advanced installation I'm trying to add the following to bootstrap.php:-

require APP . 'Vendor' . DS . 'autoload.php';

I've attempted to do this via the before_script of my .travis.yml file to append bootstrap.php:-

before_script:
  - git clone https://github.com/FriendsOfCake/travis.git --depth 1 ../travis
  - ../travis/before_script.sh
  - echo "require APP . 'Vendor' . DS . 'autoload.php';" >> ../cakephp/app/Config/bootstrap.php

Unfortunately this is failing as the file APP . 'Vendor' . DS . 'autoload.php' cannot be found. (I have also tried looking for the file in APP . '..' . DS . 'Vendor' . DS . 'autoload.php').

Where is the Composer autoload.php file located when installing CakePHP using Travis? How can I ensure my third-party package is loaded when my tests run remotely on Travis CI?


Solution

  • The solution was to change the Vendor folder in the require statement to the lowercase vendor in the before_script:-

    before_script:
      - git clone https://github.com/FriendsOfCake/travis.git --depth 1 ../travis
      - ../travis/before_script.sh
      - echo "require APP . 'vendor' . DS . 'autoload.php';" >> ../cakephp/app/Config/bootstrap.php
    

    After doing this CakePHP correctly includes the Composer autoload file.