Travis CI offers an excellent and free! continuous integration service. It runs your unit tests after you pushed your code to GitHub and deploys your changes to your staging/production servers if your tests pass.
One of the issues I run into while setting up my application with Travis was that my tests require email to work. By default tests sending emails will fail because the underlying mail system is disabled. In my case testing a ZF2 application, the error message was along those lines:
Configuration read from /home/travis/build/[...]/phpunit.xml ..............................sh: 1: -t: not found E........... Time: 5 seconds, Memory: 73.00Mb There was 1 error: 1) UserTest\Controller\UserControllerTest::testRegisterActionValidUser Zend\Mail\Exception\RuntimeException: Unable to send mail: Unknown error
To work around this you need to set up a mock mail service. This requires you to set up your .travis.yml according to this example:
language: php php: - 5.3 - 5.4 - 5.5 before_install: - sudo apt-get update -qq - sudo apt-get install -y -qq postfix before_script: - sudo service postfix stop - smtp-sink -d "%d.%H.%M.%S" localhost:2500 1000 & - echo -e '#!/usr/bin/env bash\nexit 0' | sudo tee /usr/sbin/sendmail - echo 'sendmail_path = "/usr/sbin/sendmail -t -i "' | sudo tee "/home/travis/.phpenv/versions/`php -i | grep "PHP Version" | head -n 1 | grep -o -P '\d+\.\d+\.\d+.*'`/etc/conf.d/sendmail.ini" notifications: email: false
This solution is based on the PHPMailer Travis configuration. Thanks!