refinery29 / test-util
Provides a test helper, generic data providers, and assertions.
This package's canonical repository appears to be gone and the package has been frozen as a result. Email us for help if needed.
Installs: 54 014
Dependents: 5
Suggesters: 0
Security: 0
Stars: 15
Watchers: 38
Forks: 0
Open Issues: 0
pkg:composer/refinery29/test-util
Requires
- php: ^5.6 || ^7.0
- beberlei/assert: ^2.7.3
- fzaninotto/faker: ^1.5.1
- zendframework/zend-file: ^2.7.1
Requires (Dev)
- codeclimate/php-test-reporter: 0.4.4
- phpunit/phpunit: ^5.7.15
- refinery29/php-cs-fixer-config: 0.6.15
Suggests
- phpunit/phpunit: If you want to make use of the assertions provided with the TestHelper
This package is not auto-updated.
Last update: 2024-06-05 22:29:34 UTC
README
Provides a test helper, generic data providers, and assertions.
Installation
Run:
$ composer require refinery29/test-util
Usage
Test Helper
If you want to make use of the test helper, import the Refinery29\Test\Util\TestHelper trait!
namespace Acme\Test; use PHPUnit\Framework; use Refinery29\Test\Util\TestHelper; final class WebsiteTest extends Framework\TestCase { use TestHelper; }
Additional Assertions
The test helper provides a few assertions:
assertClassesAreAbstractOrFinal($path, array $excludeDirectories = [])assertClassesSatisfy(callable $specification, $path, array $excludeDirectories = [])assertFinal($className)assertExtends($parentClassName, $className)assertImplements($interfaceName, $className)
assertClassesSatisfy(callable $specification, $path, array $excludeDirectories = [])
The callable will be passed in an instance of ReflectionClass which can
be used for further introspection, and should return a bool, indicating
that the specification is satisfied.
For example:
$this->assertClassesSatisfy( function (\ReflectionClass $reflection) { return false !== \strpos('MySmallClass', $reflection->getName()); }, __DIR__ );
Generating fake data using Faker
Lazily fetch an instance of Faker\Generator (see fzaninotto/faker) using
getFaker($locale = 'en_US') : \Faker\Generator
Providing data from an array of values
Quickly provide data from an array of values, using
provideData(array $data) : \Generator
Providing data from multiple concrete data providers
Quickly provide data from multiple concrete data providers using
provideDataFrom(...$dataProviders) : \Generator
Providing combination of data from multiple concrete data providers
Quickly combine data from multiple concrete data providers using
provideCombinedDataFrom(...$dataProviders) : array
Data Providers
If you need to assert that invalid values are rejected, you can use one of the data providers:
Refinery29\Test\Util\DataProvider\BlankStringRefinery29\Test\Util\DataProvider\InvalidBooleanRefinery29\Test\Util\DataProvider\InvalidBooleanNotNullRefinery29\Test\Util\DataProvider\InvalidFloatRefinery29\Test\Util\DataProvider\InvalidFloatNotNullRefinery29\Test\Util\DataProvider\InvalidIntegerRefinery29\Test\Util\DataProvider\InvalidIntegerNotNullRefinery29\Test\Util\DataProvider\InvalidIntegerishRefinery29\Test\Util\DataProvider\InvalidIntegerishNotNullRefinery29\Test\Util\DataProvider\InvalidIsoDateRefinery29\Test\Util\DataProvider\InvalidIsoDateNotNullRefinery29\Test\Util\DataProvider\InvalidJsonStringRefinery29\Test\Util\DataProvider\InvalidNumericRefinery29\Test\Util\DataProvider\InvalidNumericNotNullRefinery29\Test\Util\DataProvider\InvalidScalarRefinery29\Test\Util\DataProvider\InvalidScalarNotNullRefinery29\Test\Util\DataProvider\InvalidStringRefinery29\Test\Util\DataProvider\InvalidStringNotNullRefinery29\Test\Util\DataProvider\InvalidUrlRefinery29\Test\Util\DataProvider\InvalidUrlNotNullRefinery29\Test\Util\DataProvider\InvalidUuidRefinery29\Test\Util\DataProvider\InvalidUuidNotNull
If you need generic values, you can use one of the data providers
Refinery29\Test\Util\DataProvider\BooleanRefinery29\Test\Util\DataProvider\EmptyValueRefinery29\Test\Util\DataProvider\FalsyRefinery29\Test\Util\DataProvider\ScalarRefinery29\Test\Util\DataProvider\Truthy
If you want to mix data providers above with some arbitrary values, use
Refinery29\Test\Util\DataProvider\Elements
Example
Putting it all together, here's an example of a test making use of the test helper:
namespace Acme\Test; use Acme\Website; use PHPUnit\Framework; use Refinery29\Test\Util\DataProvider; use Refinery29\Test\Util\TestHelper; final class WebsiteTest extends Framework\TestCase { use TestHelper; /** * @dataProvider providerInvalidTitle * * @param mixed $title */ public function testConstructorRejectsInvalidTitle($title) { $this->expectException(\InvalidArgumentException::class); new Website($title); } /** * @return \Generator */ public function providerInvalidTitle() { return $this->provideDataFrom( new DataProvider\InvalidString(), new DataProvider\BlankString(), new DataProvider\Elements([ 'foo', 'bar', ]) ); } public function testConstructorSetsTitle() { $title = $this->getFaker()->sentence(); $website = new Website($title); $this->assertSame($title, $website->title()); } /** * @dataProvider \Refinery29\Test\Util\DataProvider\InvalidUrl::data() * * @param mixed $url */ public function testWithUrlRejectsInvalidUrl($url) { $title = $this->getFaker()->sentence(); $website = new Website($title); $this->expectException(\InvalidArgumentException::class); $website->withUrl($url); } /** * @dataProvider providerUrl * * @param string $url */ public function testWithUrlClonesInstanceAndSetsUrl($url) { $title = $this->getFaker()->sentence(); $website = new Website($title); $mutated = $website->withUrl($url); $this->assertInstanceOf(Website::class, $mutated); $this->assertNotSame($website, $mutated); $this->assertSame($url, $mutated->url()); } /** * @return \Generator */ public function providerUrl() { return $this->provideData([ 'http://www.refinery29.com', 'http://www.refinery29.de', 'http://www.refinery29.uk', ]); } }
Contributing
Please have a look at CONTRIBUTING.md.
Code of Conduct
Please have a look at CONDUCT.md.
License
This package is licensed using the MIT License.