astrotomic / phpunit-assertions
一组常见的 PHPUnit 自定义断言。
0.11.0
2024-01-18 16:13 UTC
Requires
- php: ^7.4 || ^8.0
- phpunit/phpunit: ^9.1 || ^10.0
Requires (Dev)
- astrotomic/iso639: ^1.0
- egulias/email-validator: ^2.1 || ^3.0
- gajus/dindent: ^2.0
- giggsey/libphonenumber-for-php: ^8.12
- hashids/hashids: ^4.0
- league/iso3166: ^2.1 || ^3.0
- orchestra/testbench: ^6.0 || ^7.0
- ramsey/uuid: ^4.0
- vinkla/hashids: ^9.0 || ^10.0
Suggests
- astrotomic/iso639: \Astrotomic\PhpunitAssertions\LanguageAssertions (^1.0)
- egulias/email-validator: \Astrotomic\PhpunitAssertions\EmailAssertions (^2.1 || ^3.0)
- gajus/dindent: \Astrotomic\PhpunitAssertions\Laravel\BladeAssertions (^2.0)
- giggsey/libphonenumber-for-php: \Astrotomic\PhpunitAssertions\PhoneNumberAssertions (^8.12)
- hashids/hashids: \Astrotomic\PhpunitAssertions\HashidAssertions (^4.0)
- league/iso3166: \Astrotomic\PhpunitAssertions\CountryAssertions (^2.1 || ^3.0)
- ramsey/uuid: \Astrotomic\PhpunitAssertions\UuidAssertions (^4.0)
- vinkla/hashids: \Astrotomic\PhpunitAssertions\Laravel\HashidAssertions (^9.0)
README
此包提供了一组常见的 PHPUnit 自定义断言。其中一些需要可选包 - 请检查 composer.json[suggest]
部分以获取更多详细信息。
安装
composer require --dev astrotomic/phpunit-assertions
使用
即使所有断言都在 trait
中,我也强烈建议您不要在测试类中使用这些 traits。相反,您可以通过 traits 访问所有断言作为静态方法。
\Astrotomic\PhpunitAssertions\StringLengthAssertions::assertSame(10, 'Astrotomic');
这将防止与核心、自定义或其他 trait 断言发生方法名冲突。
断言
数组
\Astrotomic\PhpunitAssertions\ArrayAssertions::assertIndexed(['foo', 'bar']); \Astrotomic\PhpunitAssertions\ArrayAssertions::assertAssociative(['foo' => 'bar']); \Astrotomic\PhpunitAssertions\ArrayAssertions::assertEquals(['foo', 'bar'], ['bar', 'foo']); \Astrotomic\PhpunitAssertions\ArrayAssertions::assertSubset(['foo' => 'bar'], ['baz' => 'foo', 'foo' => 'bar']); \Astrotomic\PhpunitAssertions\ArrayAssertions::assertContainsAll(['foo', 'bar'], ['baz', 'foo', 'lorem', 'ipsum', 'bar']);
国家
composer require --dev league/iso3166:^3.0
\Astrotomic\PhpunitAssertions\CountryAssertions::assertName('Germany'); \Astrotomic\PhpunitAssertions\CountryAssertions::assertAlpha2('DE'); \Astrotomic\PhpunitAssertions\CountryAssertions::assertAlpha3('DEU'); \Astrotomic\PhpunitAssertions\CountryAssertions::assertNumeric('276');
电子邮件
composer require --dev egulias/email-validator:^3.0
\Astrotomic\PhpunitAssertions\EmailAssertions::assertValidLoose('gummibeer@astrotomic.info'); \Astrotomic\PhpunitAssertions\EmailAssertions::assertValidStrict('gummibeer@astrotomic.info'); \Astrotomic\PhpunitAssertions\EmailAssertions::assertDomain('astrotomic.info', 'gummibeer@astrotomic.info'); \Astrotomic\PhpunitAssertions\EmailAssertions::assertLocalPart('gummibeer', 'gummibeer@astrotomic.info'); \Astrotomic\PhpunitAssertions\EmailAssertions::assertPlusMailbox('gummibeer', 'gummibeer+news@astrotomic.info'); \Astrotomic\PhpunitAssertions\EmailAssertions::assertPlusAlias('news', 'gummibeer+news@astrotomic.info');
地理
\Astrotomic\PhpunitAssertions\GeographicAssertions::assertLatitude(53.551085); \Astrotomic\PhpunitAssertions\GeographicAssertions::assertLongitude(9.993682); \Astrotomic\PhpunitAssertions\GeographicAssertions::assertCoordinates([ 'lat' => 53.551085, 'lng' => 9.993682, ]);
HashID
composer require --dev hashids/hashids:^4.0
\Astrotomic\PhpunitAssertions\HashidAssertions::assertHashIds('3kTMd', 2, 'this is my salt'); \Astrotomic\PhpunitAssertions\HashidAssertions::assertHashId('yr8', 'this is my salt');
语言
composer require --dev astrotomic/iso639:^1.0
\Astrotomic\PhpunitAssertions\LanguageAssertions::assertName('German'); \Astrotomic\PhpunitAssertions\LanguageAssertions::assertAlpha2('de');
可为空类型
\Astrotomic\PhpunitAssertions\NullableTypeAssertions::assertIsNullableString('Astrotomic'); \Astrotomic\PhpunitAssertions\NullableTypeAssertions::assertIsNullableInt(42); \Astrotomic\PhpunitAssertions\NullableTypeAssertions::assertIsNullableFloat(42.5); \Astrotomic\PhpunitAssertions\NullableTypeAssertions::assertIsNullableArray(['Astrotomic' => 'Gummibeer']); \Astrotomic\PhpunitAssertions\NullableTypeAssertions::assertIsNullableBool(true);
电话号码
composer require --dev giggsey/libphonenumber-for-php:^8.12
\Astrotomic\PhpunitAssertions\PhoneNumberAssertions::assertE164('+498001110550'); \Astrotomic\PhpunitAssertions\PhoneNumberAssertions::assertValid('+49 800 - 111 0 550'); \Astrotomic\PhpunitAssertions\PhoneNumberAssertions::assertValidForRegion('+49 800 - 111 0 550', 'DE');
字符串
\Astrotomic\PhpunitAssertions\StringLengthAssertions::assertSame(10, 'Astrotomic'); \Astrotomic\PhpunitAssertions\StringLengthAssertions::assertNotSame(8, 'Astrotomic'); \Astrotomic\PhpunitAssertions\StringLengthAssertions::assertLessThan(11, 'Astrotomic'); \Astrotomic\PhpunitAssertions\StringLengthAssertions::assertLessThanOrEqual(10, 'Astrotomic'); \Astrotomic\PhpunitAssertions\StringLengthAssertions::assertGreaterThan(9, 'Astrotomic'); \Astrotomic\PhpunitAssertions\StringLengthAssertions::assertGreaterThanOrEqual(10, 'Astrotomic');
URL
\Astrotomic\PhpunitAssertions\UrlAssertions::assertValidLoose('https://astrotomic.info'); \Astrotomic\PhpunitAssertions\UrlAssertions::assertScheme('https', 'https://astrotomic.info'); \Astrotomic\PhpunitAssertions\UrlAssertions::assertHost('astrotomic.info', 'https://astrotomic.info'); \Astrotomic\PhpunitAssertions\UrlAssertions::assertPath('/contributor/gummibeer/', 'https://astrotomic.info/contributor/gummibeer/'); \Astrotomic\PhpunitAssertions\UrlAssertions::assertQuery(['_' => '123', 'q' => 'search'], 'https://astrotomic.info?q=search&_=123'); \Astrotomic\PhpunitAssertions\UrlAssertions::assertComponent('gummibeer', 'https://gummibeer@astrotomic.info', PHP_URL_USER);
路径
\Astrotomic\PhpunitAssertions\PathAssertions::assertDirname('/foo/bar', '/foo/bar/image.jpg'); \Astrotomic\PhpunitAssertions\PathAssertions::assertBasename('image.jpg', '/foo/bar/image.jpg'); \Astrotomic\PhpunitAssertions\PathAssertions::assertFilename('image', '/foo/bar/image.jpg'); \Astrotomic\PhpunitAssertions\PathAssertions::assertExtension('jpg', '/foo/bar/image.jpg');
UUID
composer require --dev ramsey/uuid:^4.0
\Astrotomic\PhpunitAssertions\UuidAssertions::assertUuid('52d08e38-ad24-4960-af02-22e0f7e0db8d');
Laravel 断言
集合
\Astrotomic\PhpunitAssertions\Laravel\CollectionAssertions::assertContains($collection, 'Astrotomic');
HashID
composer require --dev vinkla/hashids:^9.0
\Astrotomic\PhpunitAssertions\Laravel\HashidAssertions::assertHashIds('3kTMd', 2); \Astrotomic\PhpunitAssertions\Laravel\HashidAssertions::assertHashId('yr8');
模型
\Astrotomic\PhpunitAssertions\Laravel\ModelAssertions::assertExists($model); \Astrotomic\PhpunitAssertions\Laravel\ModelAssertions::assertSame($model, \App\Models\User::first()); \Astrotomic\PhpunitAssertions\Laravel\ModelAssertions::assertRelated($post, 'comments', $comment); \Astrotomic\PhpunitAssertions\Laravel\ModelAssertions::assertRelated( $post, 'comments', \App\Models\Comment::class, \Illuminate\Database\Eloquent\Relations\HasMany::class );
Blade
composer require --dev gajus/dindent:^2.0
\Astrotomic\PhpunitAssertions\Laravel\BladeAssertions::assertRenderEquals( "<p>Price: <code>99.99 €</code></p>", '<p>Price: <code>{{ number_format($price, 2) }} €</code></p>', ['price' => 99.99] );