nunomaduro / pest
Requires
- php: ^7.2.0
- phpunit/phpunit: ^8.1
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.15
- localheinz/phpstan-rules: ^0.10.0
- nunomaduro/phpinsights: ^1.7
- phpstan/phpstan: ^0.11.12
- phpstan/phpstan-strict-rules: ^0.11.1
- roave/no-floaters: ^1.1
- symfony/var-dumper: ^4.3.3
- thecodingmachine/phpstan-strict-rules: ^0.11.2
This package is auto-updated.
Last update: 2020-03-30 16:58:17 UTC
README
此存储库包含旧版本的PEST。一个新版本正在私下编码中,很快就会发布!请做好准备。
Pest 被精心打造,旨在将使用 JEST 进行测试的乐趣带给 PHP。由 Nuno Maduro 创建,目前由 Caneco 负责维护。
🚀 安装 & 使用
需要 PHP 7.2+ 和 phpunit 8.1+
首先,使用 Composer 安装 Pest
composer require nunomaduro/pest --dev
然后,创建一个名为 tests/sum.php
的文件。这将包含我们的实际测试
test('adds 1 + 2 to equal 3', function () { assertEquals(3, Math::sum(1,2)); });
然后,通常情况下,如果您还没有,创建您的 phpunit.xml.dist
。
最后,运行 vendor/bin/pest
,Pest 将打印此消息
PASS ./sum.php
✓ adds 1 + 2 to equal 3 (5ms)
📚 文档
Pest 旨在在不进行配置的情况下,在大多数 PHP/PHPUnit 项目上无缝工作。
我们的目标是创建一个 令人愉悦的 PHP 测试框架,重点在于简单——灵感来源于 PHPUnit 和 Jest 之间的界线。
编写测试
在测试文件中,您只需要 test
或 it
方法来运行测试。例如,假设有一个函数 inchesOfRain()
,它的值应该是 0
。整个测试可以是这样的:
test('did not rain', function () { assertEquals(0, Weather::inchesOfRain()); }); // Or, also under the alias `it` it('did not rain', function () { assertEquals(0, Weather::inchesOfRain()); });
使用断言
Pest 使用 "断言" 来让您以不同的方式测试值。
it('has something', (function () { assertTrue(true); assertFalse(false); assertCount(1, ['foo']); assertEmpty([]); assertEquals('bar', 'bar'); assertStringContainsString('bar', 'foobarbaz'); // ... });
有关完整列表,请参阅 PHPUnit 断言文档。
设置和清理
在编写测试时,您可能需要在测试运行之前做一些设置工作,并在测试运行之后做一些清理工作。Pest 提供了帮助函数来处理这些工作。
// Runs before each test on this file beforeEach(function () { Database::migrate(); }); // Runs after each test on this file afterEach(function () { Database::delete(); }); test('city database has Vienna', function () { assertTrue(City::exists('Vienna')); }); test('city database has San Juan', function () { assertTrue(City::exists('San Juan')); });
一次性设置
在某些情况下,您只需在文件开始时进行一次设置。当设置是异步的,您无法直接在线完成时,这可能会特别麻烦。Pest提供了beforeAll和afterAll来处理这种情况。
// Runs before the first test of the file beforeAll(function () { Database::migrate(); }); // Runs after the last test of the file afterAll(function () { Database::delete(); }); test('city database has Vienna', function () { assertTrue(City::exists('Vienna')); }); test('city database has San Juan', function () { assertTrue(City::exists('San Juan')); });
这有助于说明执行顺序。
beforeAll(function () { echo 'beforeAll'); }; afterAll(function () { echo 'afterAll'); }; beforeEach(function () { echo 'beforeEach'); }; afterEach(function () { echo 'afterEach'); }; test('', function () { echo 'test 1'); }; test('', function () { echo 'test 2'); }; // beforeAll // beforeEach // test 1 // afterEach // beforeEach // test 2 // afterEach // afterAll
模拟
传递给test
|it
方法的闭包绑定到一个典型的PHPUnit\Framework\TestCase
。对于模拟,您可以选择使用$this->createMock
方法创建模拟。
interface Foo { public function bar(): int; } it('works fine with mocks', function () { $mock = $this->createMock(Foo::class); $mock->expects($this->once())->method('bar')->willReturn(2); assertEquals(2, $mock->bar()); });
从PHPUnit迁移到Pest
不需要迁移。它直接工作。
配置
Pest使用您的基本phpunit.xml
配置文件。
💖 支持开发
您喜欢这个项目吗?通过捐赠来支持它
Pest是开源软件,许可协议为MIT协议。