I've written a package and as part of the development proccess I want to run unit tests on it. This basically means I need a bootstrap file to register the autoloader for my package.
Any package I look at doesn't have a specific bootstrap file, thus I don't quite understand how the developers are testing their own packages.
This is my directory structure
src
.CompanyName
..PackageName
...Class 1
...Class 2
tests
.Class1Test
.Class2Test
composer.json
phpunit.xml.dist
Now if I run phpunit
inside the root directory, all my tests say \\CompanyName\\PackageName\\Class1
wasn't found. Which is legite, since nobody had them included. So the question is - How and when do I include my classes.
Looking at a random packages I can see they rely on vendor/autoload.php
, but I don't have this vendor dir. Should I run composer install
to have it created ?
Well, I've figured the answer.
Composer provides it's own autoloader I could use.
- Run
composer install
orcomposer update
in the project root. This will create thevendor
dir with composersautoload.php
file. - Add
vendor
dir to.gitignore
along withcomposer.lock
- In
phpunit.xml.dist
specify composer's autoloader as the bootstrap file
Example phpunit.xml.dist
file
<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
backupStaticAttributes="false"
bootstrap="vendor/autoload.php"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false"
syntaxCheck="false"
>
<testsuites>
<testsuite name="Your package's test suit">
<directory>./tests/</directory>
</testsuite>
</testsuites>
</phpunit>
Notice the bootstrap entry there.
Yes you should run composer update
. It is not harmful to try since everything is put into /vendor/ which you can later delete.
来源:https://stackoverflow.com/questions/13951804/composer-package-testing-bootstrap