0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

JestとPHPUnitの比較

Last updated at Posted at 2024-10-06

はじめに

筆者はフリーランスエンジニアになってしばらく、PHPの案件をやっていたのですが
直近の案件ではTypescriptに触れる機会がありました。
Typescript(npm)の世界ではJestがデファクトスタンダードかと思われますが
例に漏れず、その現場でも利用されています。

今まではPHPUnitでテストすることが多かったですので、少々の違いに戸惑うこともあり
各ライフサイクルメソッドの比較をしてみようかなと思いました。

JestとPHPUnitの比較

ライフサイクル PHPUnit Jest
テスト全体で開始時に1度実行 setUpBeforeClass() beforeAll()
テスト全体で終了時に1度実行 tearDownAfterClass() afterAll()
各テスト開始時に実行 setUp() beforeEach()
各テスト終了時に実行 tearDown() afterEach()

名前から大体予測できそうな感じですね。

その他の特徴についても比較してみます。

特徴 PHPUnit Jest
テスト開始時のDBマイグレーション RefreshDatabase等のTraitで可能 自前でロジックを書く必要がある
DBアサーション assertDatabaseHas等のアサーションが可能 なし(カスタムアサーションを作れば実現可能
JSON(オブジェクト)アサーション assertJSONStructure等のアサーションがある expect(Object).toMatchObject(diffrenceObject)で可能
クラス、オブジェクトのmock Mockeryで実装が必要 jest.fn()でモック可能
ダミーデータ作成 LaravelであればFactory::faker()またはfake()ヘルパーで作成可能 faker-jsを導入すれば可能
テスト時の環境変数設定 Laravelであれば.env.testingを用意すれば半自動的に読み込む(PHPUnit.xmlの設定も必要) jest.config.jsを用意し、setupFilesで読み込むファイルを指定。ここで環境変数を設定することができる

ざっと並べてみました。
個人的な感触ですが、JestはDBマイグレーション、DBアサーションは少し弱そうだなという印象を受けました。
まぁそれもカスタムアサーションなどで回避できることなので、大きな差では無い様に思えます。

Jestはまだ触り始めたばかりなので、上記の内容に間違いがあるかもしれませんが
その場合はコメントなどでアドバイス頂けると幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?