PHPテストフレームワークPestのテストの書き方例

### 環境構築等の参考はこちら
[PHPテストフレームワークPestを試してみる \- Qiita](https://qiita.com/yoshinyan/items/4dca7d87761541ad5c47)

こちらも公式がとてもわかりやすい。
### 参考サイト
[Pest \- An elegant PHP Testing Framework \| Assertions](https://pestphp.com/docs/assertions/)

### テストの説明を日本語にしていて若干読みやすい例。

**ちなみに例は、"test"を"it"に書き変えてもそのまま動くはずです**

```php:tests/Unit/sampleTest.php
<?php

test('足し算のテスト', function () {
    $sum = 1 + 1;
    assertEquals(2, $sum);
});

test('引き算のテスト', function () {
    $sum = 2 - 1;
    assertEquals(1, $sum);
});

test('真テスト', function () {
    assertTrue(true);
});

test('偽テスト', function () {
    assertFalse(false);
});

test('同じ数か?', function () {
    $array = [1, 2, 3, 4, 5];

    assertCount(5, $array);
});

test('同じものかどうか', function () {
    $var = 'hoge';

    $this->assertEquals('hoge', $var);
});

test('空かかどうか', function () {
    $empty_array = [];

    $this->assertEmpty($empty_array);
});

test('特定の文字列を含むか', function () {
    $hoge = 'hogetarou';

    assertStringContainsString('hoge', $hoge);
});

# 結果表示がよい。
./vendor/bin/pest
   PASS  Tests\Unit\sampleTest
  ✓ 足し算のテスト
  ✓ 引き算のテスト
  ✓ 上($this)と下は同じ
  ✓ 真テスト
  ✓ 偽テスト
  ✓ カウント
  ✓ 同じものかどうか
  ✓ 空かかどうか
  ✓ 特定の文字列を含むか

  Tests:  9 passed
  Time:   0.65s
```

$thisをつけて呼んでもよい。ないほうが好み。

```php
test('上($this)と下は同じ', function () {
    $this->assertTrue(true);

    // 上と下は同じ
    assertTrue(true);
});
```

PHPUnitのAssertionsメソッドたちがそのまま使えるらしい。
[1\. Assertions — PHPUnit 9\.0 Manual](https://phpunit.readthedocs.io/en/9.0/assertions.html)

### グループ毎に実行できる
```php
<?php

test('足し算のテスト', function () {
    $sum = 1 + 1;
    assertEquals(2, $sum);
})->group('calc');

test('引き算のテスト', function () {
    $sum = 2 - 1;
    assertEquals(1, $sum);
})->group('calc');

test('かけ算のテスト', function () {
    $result = 2 * 2;
    assertEquals(4, $result);
})->group('calc');

test('わり算のテスト', function () {
    $result = 2 / 1;
    assertEquals(2, $result);
})->group('calc');

// グループを指定してテスト実行
./vendor/bin/pest --group=calc

   PASS  Tests\Unit\sampleTest
  ✓ 足し算のテスト
  ✓ 引き算のテスト
  ✓ かけ算のテスト
  ✓ わり算のテスト

  Tests:  4 passed
```

参考サイト
[Pest \- An elegant PHP Testing Framework \| Groups Of Tests](https://pestphp.com/docs/groups/)

### 任意のテストをskipする

```php

<?php
// skip
test('足し算のテスト', function () {
    $sum = 1 + 1;
    assertEquals(2, $sum);
})->group('calc')->skip();

// コメントつきskip
test('引き算のテスト', function () {
    $sum = 2 - 1;
    assertEquals(1, $sum);
})->group('calc')->skip('testでskip');

// 条件付きskip
// 使いどころがありそう
test('かけ算のテスト', function () {
    $num = 10;

    $result = 2 * 2;
    assertEquals(4, $result);
})->group('calc')->skip($num < 100, 'numが100より小さければskip');

   WARN  Tests\Unit\sampleTest
  s 足し算のテスト
  s 引き算のテスト → testでskip
  s かけ算のテスト → numが100より小さければskip

  Tests:  3 skipped
  Time:   0.38s

```

### デバックしたいとき

```php
// ひとつだけテスト実行
test('わり算のテスト', function () {
    $result = 2 / 1;
    assertEquals(2, $result);
})->group('calc')->only();

  PASS  Tests\Unit\sampleTest
  ✓ わり算のテスト

  Tests:  1 passed
```

### あとでテストを書きたいとき

```php
test('あとで複雑な計算のテストを書く');
or
it('あとで複雑な計算のテストを書く');

   WARN  Tests\Unit\sampleTest
  r あとで複雑な計算のテストを書く → This test did not perform any assertions  /app/vendor/pestphp/pest/src/Factories/TestCaseFactory.php(185) : eval()'d code:4

  Tests:  1 risked
  Time:   0.26s
```

参考サイト
[Pest \- An elegant PHP Testing Framework \| Skipping Tests](https://pestphp.com/docs/skipping-tests/)

### 感想
便利だし、書きやすいのではないでしょうか。