ApiTestCase adalah PHPUnit TestCase yang akan membuat hidup Anda sebagai pengembang API Symfony lebih mudah. Ini memperluas Symfony WebTestCase dasar dengan beberapa fitur keren.
Berkat PHP-Matcher Anda dapat, menurut readme-nya, "menulis respons json yang diharapkan seperti gangster". Kami sangat setuju.
Ia juga menggunakan Alice untuk memudahkan pemuatan perlengkapan Doktrin.
Fitur:
Dengan asumsi Anda sudah menginstal Komposer secara global:
composer require --dev lchrusciel/api-test-case
Dan selesai! ApiTestCase bekerja dengan konfigurasi default.
Kami menyediakan dua kelas dasar untuk kasus pengujian Anda: JsonApiTestCase dan XmlApiTestCase. Pilih salah satu berdasarkan format API yang ingin Anda buat.
Alur kerja TDD dasar adalah sebagai berikut:
assertResponse
untuk memeriksa apakah konten respons sesuai dengan harapan Anda. Anda memerlukan nama untuk file respons;src/AppBundle/Tests/Responses/Expected/hello_world.json
misalnya.Mari kita lihat contoh sederhananya! Tulis tes berikut:
namespace AppBundle Tests Controller HelloWorldTest ;
use ApiTestCase JsonApiTestCase ;
class HelloWorldTest extends JsonApiTestCase
{
public function testGetHelloWorldResponse ()
{
$ this -> client -> request ( ' GET ' , ' / ' );
$ response = $ this -> client -> getResponse ();
$ this -> assertResponse ( $ response , ' hello_world ' );
}
}
Sekarang tentukan file respons yang diharapkan:
{
"message" : " Hello ApiTestCase World! "
}
Jalankan pengujian Anda:
vendor/bin/phpunit
Pengujian Anda akan gagal dengan beberapa kesalahan, Anda mungkin kehilangan pengontrol dan peruteannya, jadi lanjutkan dan tentukan! Segera setelah Anda mengimplementasikan Pengontrol dan mengonfigurasi perutean yang sesuai, Anda dapat menjalankan pengujian lagi:
Jika isi respons sesuai dengan harapan kami, konsol akan menampilkan pesan sederhana:
OK (1 tests, 2 assertions)
Jika tidak maka akan muncul perbedaan pesan yang diterima:
" Hello ApiTestCase World " does not match " Hello ApiTestCase World! " .
@@ -1,4 +1,3 @@
{
- " message " : " Hello ApiTestCase World! "
+ " message " : " Hello ApiTestCase World "
}
-
Pertama, fungsi assertResponse
akan memeriksa kode respons (200 adalah kode respons default), kemudian akan memeriksa apakah header respons berisi tipe konten application/json
. Pada akhirnya ia akan memeriksa apakah isi respons sesuai dengan harapan. Terkadang Anda tidak dapat memprediksi beberapa nilai dalam respons, misalnya tanggal atau id yang dibuat secara otomatis dari database. Tidak diperlukan keajaiban di sini karena PHP-Matcher hadir dengan bantuan. Ini hanyalah beberapa contoh pola yang tersedia:
@string@
@integer@
@boolean@
@array@
Periksa lebih lanjut tentang dokumentasi PHP-Matcher.
Dengan pola ini, respons yang Anda harapkan akan terlihat seperti ini:
{
"message" : " @string@ "
}
Dengan ini, string apa pun di bawah message
utama akan cocok dengan polanya. Respons yang diharapkan lebih rumit akan terlihat seperti ini:
[
{
"id" : " @integer@ " ,
"name" : " Star-Wars T-shirt " ,
"sku" : " SWTS " ,
"price" : 5500 ,
"sizes" : " @array@ " ,
"created_at" : " @[email protected]() "
},
{
"id" : " @integer@ " ,
"name" : " Han Solo Mug " ,
"sku" : " HSM " ,
"price" : 500 ,
"sizes" : " @array@ " ,
"created_at" : " @[email protected]() "
}
]
Dan akan cocok dengan daftar produk berikut:
array (
array (
' id ' => 1 ,
' name ' => ' Star-Wars T-shirt ' ,
' sku ' => ' SWTS ' ,
' price ' => 5500 ,
' sizes ' => array ( ' S ' , ' M ' , ' L ' ),
' created_at ' => new DateTime (),
),
array (
' id ' => 2 ,
' name ' => ' Han Solo Mug ' ,
' sku ' => ' HSM ' ,
' price ' => 500 ,
' sizes ' => array ( ' S ' , ' L ' ),
' created_at ' => new DateTime (),
),
)
ApiTestCase terintegrasi dengan nelmio/alice
. Berkat perpustakaan yang bagus ini Anda dapat dengan mudah memuat perlengkapan Anda saat Anda membutuhkannya. Anda harus menentukan perlengkapan Anda dan menempatkannya di direktori yang sesuai. Berikut adalah beberapa contoh cara menentukan perlengkapan dan kasus penggunaan Anda. Untuk informasi lebih lanjut bagaimana menentukan perlengkapan Anda, periksa dokumentasi Alice.
Untuk menggunakan Alice dengan Doctrine, Anda harus mengaktifkan dua bundel tambahan:
Symfony 4.0+
// config/bundles.php
return [
// ...
Nelmio Alice Bridge Symfony NelmioAliceBundle::class => [ ' test ' => true ],
Fidry AliceDataFixtures Bridge Symfony FidryAliceDataFixturesBundle::class => [ ' test ' => true ],
];
Sekarang, katakanlah Anda memiliki entitas Doktrin yang dipetakan bernama Buku di aplikasi Anda:
class Book
{
private $ id ;
private $ title ;
private $ author ;
// ...
}
Untuk memuat perlengkapan pengujian, Anda perlu mendefinisikan file YAML
sederhana di src/AppBundle/Tests/DataFixtures/ORM/books.yml
:
ApiTestCaseTestEntityBook :
book1 :
title : " Lord of The Rings "
author : " J. R. R. Tolkien "
book2 :
title : " Game of Thrones "
price : " George R. R. Martin "
Terakhir, untuk menggunakan perlengkapan ini dalam pengujian, panggil saja metode yang tepat:
public function testBooksIndexAction ()
{
// This method require subpath to locate specific fixture file in your DataFixtures/ORM directory.
$ this -> loadFixturesFromFile ( ' books.yml ' );
// There is another method that allows you to load fixtures from directory.
$ this -> loadFixturesFromDirectory ( ' big_library ' );
}
Untuk menyesuaikan konfigurasi test suite Anda, Anda dapat menambahkan beberapa opsi lagi ke phpunit.xml:
< php >
< server name = " KERNEL_CLASS " value = " AcmeKernel " />
< server name = " EXPECTED_RESPONSE_DIR " value = " /path/to/expected/responses/ " />
< server name = " FIXTURES_DIR " value = " /path/to/DataFixtures/ORM/ " />
< server name = " OPEN_ERROR_IN_BROWSER " value = " true/false " />
< server name = " OPEN_BROWSER_COMMAND " value = " open %s " />
< server name = " IS_DOCTRINE_ORM_SUPPORTED " value = " true/false " />
< server name = " TMP_DIR " value = " /tmp/path/to/temporary/folder/ " />
< server name = " ESCAPE_JSON " value = " true/false " />
</ php >
KERNEL_CLASS
memungkinkan Anda menentukan kelas mana yang harus digunakan untuk mengatur Kernel.ERESPONSE_DIR
berisi jalur ke folder dengan respons yang diharapkan. Ini digunakan ketika hasil API dibandingkan dengan file json yang ada. Jika nilai ini tidak disetel, ApiTestCase akan mencoba menebak lokasi respons, mencari respons di folder: '../Responses' yang relatif terletak di kelas pengujian pengontrol Anda.FIXTURES_DIR
berisi jalur ke folder dengan perlengkapan data Anda. Secara default, jika variabel ini tidak disetel, variabel ini akan mencari ../DataFixtures/ORM/
yang lokasinya relatif dekat dengan kelas pengujian Anda. ApiTestCase menampilkan RunTimeException jika folder tidak ada atau tidak ada file apa pun untuk dimuat.OPEN_ERROR_IN_BROWSER
adalah tanda yang mengaktifkan tampilan kesalahan di jendela browser. Nilai defaultnya adalah salah.OPEN_BROWSER_COMMAND
adalah perintah yang akan digunakan untuk membuka browser dengan pengecualian.IS_DOCTRINE_ORM_SUPPORTED
adalah tanda yang mengaktifkan dukungan doktrin termasuk pemuat perlengkapan data yang berguna dan pembersih basis data.TMP_DIR
berisi jalur ke folder sementara, tempat file log akan disimpan.ESCAPE_JSON
adalah tanda yang mengaktifkan pelolosan (karakter unicode dan garis miring) dari keluaran JSON Anda sebelum membandingkannya dengan data yang diharapkan. Nilai defaultnya adalah salah. Tanda ini hanya ada untuk kompatibilitas dengan versi ApiTestCase sebelumnya (saat diaktifkan) dan akan dihapus di versi mendatang. Di direktori test/
, Anda dapat menemukan contoh proyek Symfony dengan konfigurasi minimal yang diperlukan untuk menggunakan perpustakaan ini.
Untuk menjalankan rangkaian pengujian PHPUnit kami, jalankan perintah berikut:
composer install
test/app/console doctrine:database:create
test/app/console doctrine:schema:create
vendor/bin/phpunit
Jika Anda menemukan bug atau mempunyai ide bagus untuk perbaikan, silakan buka terbitan di repositori ini.
Rilisan akan diberi nomor dengan format major.minor.patch
.
Dan dibangun dengan pedoman berikut.
Untuk informasi lebih lanjut tentang SemVer, silakan kunjungi situs web semver.org.
Lisensi dapat ditemukan di sini.
Perpustakaan ini awalnya dibuat oleh:
di perusahaan Lakion di bawah https://github.com/Lakion/ApiTestCase repositori.
Lihat daftar kontributor.