PHP Tests

A unit-testing library for PHP that's super easy to get started with.

Updates in this version

  • tests fail if: Any comparison fails OR testFunc returns false
    • Previously, pass/fail was entirely driven by the function's return value

Intentions

  • Clean up code base
  • one-line install, prompting you for configuration, and writing a default config file.
  • output sample-test class
  • Run all tests in repo
  • Classmap-autoloader of all php files in dir

Should I use this over PHP Unit?

If you've never used PHP Unit before, this will be easier to get started with. If you don't mind taking probably 20 or 30 minutes to read the docs & setup your environment, PHP Unit is a better choice.

Getting Started

  1. Install, via terminal:
    • Change to download directory: cd ~/path/to/global/installs
    • Download: git clone https://gitlab.com/taeluf/php-tests
    • Add command to ~/.bashrc: echo "alias phptest=\"php $(pwd)/php-tests/code/cli.php\"" >> ~/.bashrc
  2. Write a test (see below)
  3. cd into the root of your project directory, then run phptest
    • You will be prompted for a path to a global autoload file.
    • You may need to configure your project. See below.
  4. In your test dir, there will now be an all-tests.html file. Open this in your browser to properly view the results.

Write a test

Notes:

  • Tests must go in test or tests directory
  • All tests must extend from \Taeluf\Tester.
  • All methods prefixed with test are test functions.
  • prepare gets called before the tests.
  • You must call YourClass::runAll() for your tests to run.
namespace Tlf\Tests\Generic;

class Strings extends \Taeluf\Tester {
  protected $prep;
  public function prepare(){
      $this->prep = "Am prep string";
  }
  
  public function testStuff(){
      //just a format I like to use
      return true
          &&  $this->compare($this->prep, "Am prep string")
          &&  $this->compare(1, "1")
          &&  !$this->compare(2, "2", true) //this test is strict, thus is false, so we flip it with !
      ;
  }
}

Strings::runAll();

Configure your project

Notes:

  • Config file must be named tlf-test.json
  • Config file must be inside your test dir
  • paths are relative to your test dir
  • All PHP files in each of your testDirs will be required.
  • autoload must be paths to php files.
    • The example shows ../test-extra... As an example of having mock objects in a dir separate from your tests

Sample config file. Needs to be named tlf-test.json and be inside your test dir.

{
  "testDirs": [
      ".",
      "Utility",
      "Traits"
  ],
  "autoload": [
      "../test-extra/MockSomething.php",
      "../test-extra/MockAnotherThing.php"
  ]
}

Everything Else

  • If you want more configuration, you can write a php script & execute that directly, instead of using our built in CLI script.
  • call $this->disable() inside a test to disable it
  • Call $this->catch('\Target\Exception\Class', bool $string=false) to expect an exception. Then do catch(\Exception $e){$this->throw($e);}. Test fails if the exception isn't "thrown"