此包已被弃用且不再维护。作者建议使用 pestphp/pest 包。

Pest 测试框架。

v0.1.0 2019-09-01 22:55 UTC

This package is auto-updated.

Last update: 2020-03-30 16:58:17 UTC


README

此存储库包含旧版本的PEST。一个新版本正在私下编码中,很快就会发布!请做好准备。

PEST
PEST Preview

Build Status Total Downloads Latest Version License

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 测试框架,重点在于简单——灵感来源于 PHPUnitJest 之间的界线。

编写测试

在测试文件中,您只需要 testit 方法来运行测试。例如,假设有一个函数 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协议