154 lines
3.9 KiB
Markdown
154 lines
3.9 KiB
Markdown
Verify
|
|
======
|
|
|
|
BDD Assertions for [PHPUnit][1] or [Codeception][2]
|
|
|
|
[](https://packagist.org/packages/codeception/verify)
|
|
[](https://packagist.org/packages/codeception/verify)
|
|
[](https://travis-ci.org/Codeception/Verify)
|
|
[](https://packagist.org/packages/codeception/verify)
|
|
[](https://github.com/vshymanskyy/StandWithUkraine/blob/main/docs/README.md)
|
|
|
|
|
|
This is very tiny wrapper for PHPUnit assertions, that are aimed to make tests a bit more readable.
|
|
With [BDD][3] assertions influenced by [Chai][4], [Jasmine][5], and [RSpec][6] your assertions would be a bit closer to natural language.
|
|
|
|
⚠️ This is the Verify 2.0 documentation, to see v1.x docs click [here.](https://github.com/Codeception/Verify/tree/1.x)
|
|
|
|
## Installation
|
|
|
|
*Requires PHP 7.4 or higher*
|
|
|
|
```
|
|
composer require codeception/verify --dev
|
|
```
|
|
|
|
> :arrow_up: **Upgrade from 1.x by following [the upgrade guide.][10]**
|
|
|
|
|
|
## Usage
|
|
|
|
Use in any test `verify` function instead of `$this->assert*` methods:
|
|
|
|
```php
|
|
use Codeception\Verify\Verify;
|
|
|
|
$user = User::find(1);
|
|
|
|
// equals
|
|
verify($user->getName())->equals('davert');
|
|
|
|
verify($user->getNumPosts())
|
|
->equals(5, 'user have 5 posts')
|
|
->notEquals(3);
|
|
|
|
// contains
|
|
Verify::Array($user->getRoles())
|
|
->contains('admin', 'first user is admin')
|
|
->notContains('banned', 'first user is not banned');
|
|
|
|
|
|
// greater / less
|
|
verify($user->getRate())
|
|
->greaterThan(5)
|
|
->lessThan(10)
|
|
->equals(7, 'first user rate is 7');
|
|
|
|
// true / false / null
|
|
verify($user->isAdmin())->true();
|
|
verify($user->isBanned())->false();
|
|
verify($user->invitedBy)->null();
|
|
verify($user->getPosts())->notNull();
|
|
|
|
// empty
|
|
verify($user->getComments())->empty();
|
|
verify($user->getRoles())->notEmpty();
|
|
|
|
// throws
|
|
Verify::Callable($callback)
|
|
->throws()
|
|
->throws(Exception::class)
|
|
->throws(Exception::class, 'exception message')
|
|
->throws(new Exception())
|
|
->throws(new Exception('message'));
|
|
|
|
// does not throw
|
|
Verify::Callable($callback)
|
|
->doesNotThrow()
|
|
->throws(Exception::class)
|
|
->doesNotThrow(new Exception());
|
|
|
|
// and many more !
|
|
```
|
|
|
|
> :page_facing_up: **See Verifiers full list [here.][7]**
|
|
|
|
## Alternative Syntax
|
|
|
|
If you follow TDD/BDD you'd rather use `expect` instead of `verify`:
|
|
|
|
```php
|
|
expect($user->getNumPosts())
|
|
->notToBeNull()
|
|
->toBeInt()
|
|
->toEqual(5, 'user have 5 posts');
|
|
```
|
|
> :page_facing_up: **See Expectations full list [here.][8]**
|
|
>
|
|
Or `verify_that` which is just an alias function:
|
|
|
|
```php
|
|
verify_that($user->getRate())->equals(7, 'first user rate is 7');
|
|
```
|
|
|
|
## Extending
|
|
|
|
In order to add more assertions you can extend the abstract class `Verify`:
|
|
|
|
```php
|
|
use Codeception\Verify\Verify;
|
|
use PHPUnit\Framework\Assert;
|
|
|
|
class MyVerify extends Verify {
|
|
|
|
//you can type $actual to only receive a specific data type
|
|
|
|
public function __construct($actual = null)
|
|
{
|
|
parent::__construct($actual);
|
|
}
|
|
|
|
public function success(string $message = '')
|
|
{
|
|
Assert::assertTrue(true, $message);
|
|
}
|
|
|
|
}
|
|
```
|
|
|
|
And use it!
|
|
|
|
```php
|
|
$myVerify = new MyVerify;
|
|
|
|
$myVerify->success('it works!');
|
|
|
|
$myVerify::Mixed('this also')->notEquals('works');
|
|
```
|
|
|
|
## License
|
|
|
|
Verify is open-sourced software licensed under the [MIT][9] License.
|
|
© Codeception PHP Testing Framework
|
|
|
|
[1]: https://phpunit.de/
|
|
[2]: https://codeception.com/
|
|
[3]: https://en.wikipedia.org/wiki/Behavior-driven_development
|
|
[4]: https://chaijs.com/
|
|
[5]: https://jasmine.github.io/
|
|
[6]: https://rspec.info/
|
|
[7]: /docs/supported_verifiers.md
|
|
[8]: /docs/supported_expectations.md
|
|
[9]: /LICENSE
|
|
[10]: /UPGRADE.md
|