Di mana saya dapat menemukan dokumentasi untuk kelas pabrik WP_UnitTestCase?

21

Dalam versi terbaru WP_UnitTestCasesudah termasuk $factoryproperti.

Sebagai contoh:

$post = $this->factory->post->create();

Di mana saya dapat menemukan dokumentasi tentang fitur yang bermanfaat ini?

djb
sumber

Jawaban:

26

Sejauh yang saya tahu, tidak ada dokumentasi untuk saat ini. Sumber resmi ada di sini .

Saya juga telah menulis tutorial tentang pengujian unit plugin WordPress, yang memberikan beberapa detail tentang fitur ini .

Salah satu keuntungan menggunakan WP_UnitTestCaseadalah pabriknya. Ini dapat diakses melalui factoryvariabel anggota. Ini factoryadalah objek dengan properti yang masing-masing merupakan instance dari salah satu kelas yang didefinisikan dalam include / factory.php . Apa yang mereka lakukan, Anda bertanya? Mereka membuatnya sangat sederhana untuk membuat pengguna, posting, istilah, dll., Di mana pun Anda membutuhkannya dalam pengujian Anda. Jadi, alih-alih melakukan ini:

$args = array( /* A bunch of user data you had to make up */ );
wp_insert_user( $args );

Anda bisa melakukan ini:

$user_id = $this->factory->user->create();

Tapi tunggu, ini jadi lebih baik. Bagaimana jika Anda membutuhkan banyak pengguna (atau posting, atau apa pun)? Anda bisa membuatnya secara massal seperti ini:

$user_ids = $this->factory->user->create_many( 25 );

Itu akan membuat 25 pengguna yang dapat Anda gunakan dalam pengujian Anda.

The factorymemiliki properti berikut yang dapat Anda gunakan:

  • $post
  • $attachment
  • $comment
  • $user
  • $term
  • $category
  • $tag
  • $blog

Semua itu dapat digunakan dengan cara yang sama seperti ditunjukkan dalam contoh di atas dengan $userpabrik. Misalnya, Anda dapat membuat posting seperti ini:

$this->factory->post->create();

Anda juga bisa menentukan argumen tertentu yang akan digunakan untuk membuat objek. Dalam contoh di atas kami membuat posting, tetapi tidak ditugaskan untuk pengguna tertentu ( post_authorbidang akan default ke 0). Terkadang kami mungkin menginginkan posting yang ditugaskan kepada pengguna sebagai gantinya. Kami akan melakukannya seperti ini:

$user_id = $this->factory->user->create();
$post_id = $this->factory->post->create( array( 'post_author' => $user_id ) );

Selain itu, jika Anda membutuhkan lebih dari sekadar ID objek yang Anda buat, Anda tidak perlu melakukan ini:

$post_id = $this->factory->post->create();
$post = get_post( $post_id );

Sebagai gantinya, gunakan create_and_get()metode ini:

// $post will be an instance of WP_Post 
$post = $this->factory->post->create_and_get();

Dalam contoh ini, kami menggunakan postpabrik, tetapi hal yang sama berlaku untuk semua pabrik.

Saya pikir saya akan menyebutkan ini kepada tim dokumen WordPress. Mungkin kita bisa memasukkan ini ke plugin dan buku pegangan tema.

Pembaruan (20 Juni 2015): Anda juga dapat membuat pabrik kustom sendiri !

Pembaruan (27 September 2016): Di WordPress 4.4 tes diperbarui untuk memberikan factory()metode statis untuk mengakses pabrik, meskipun factoryproperti masih disediakan melalui pembuat sihir.

JD
sumber
Domain sudah mati, dan begitu juga tautan ke tutorial. Apakah sudah dipindahkan?
Josh Habdas
@ JoshH Tampaknya sudah kembali sekarang. Anda mungkin menekannya saat situs menjalankan cadangan di tengah malam (zona waktu saya).
JD
@ JoshH Saya tidak tahu ada kerangka kerja unit pengujian yang menggunakan kode prosedural untuk pengujian. Saya benar-benar meragukan bahwa kerangka pengujian prosedural akan bekerja hampir sama baiknya dengan OO, hanya karena cara kerjanya perlu. Namun, hanya karena tes dibangun di atas kerangka kerja berorientasi objek seperti PHPUnit tidak menentukan bahwa mereka hanya dapat menguji kode OO. Saya punya banyak kode prosedural plugin saya, dan mengujinya dengan cara yang persis sama. WordPress juga menguji banyak kode prosedural dengan cara ini. Jadi seharusnya tidak ada masalah.
JD
Terima kasih @JD Saya idealnya ingin menulis tes saya dengan cara ini juga. Tapi saya akan tunduk pada OOP mengingat itu tidak ada dalam codeline utama. PS Saya mencoba mengirimkan komentar di blog Anda dan menerima kesalahan. Menghadapi wajah licin Apapun, terima kasih untuk 411.
Josh Habdas
1
@JoshH Terima kasih atas masalah tentang komentar, ini harus diperbaiki sekarang. Itu disebabkan oleh plugin anti-spam yang terlalu bersemangat.
JD
2

Kode sumber di

https://github.com/rnagle/wordpress-unit-tests/blob/master/includes/factory.php

tampaknya menjadi tempat terbaik untuk melihat saat ini

djb
sumber
2
Hapus saja tautan dari pertanyaan Anda: Apa yang akan Anda baca? Harap selalu menulis jawaban yang tidak bergantung pada sumber luar. Jika tidak, kami harus menghapus jawaban Anda.
kaiser
2
@kaiser, saya tahu dari mana Anda berasal, tetapi jawaban untuk pertanyaan saya adalah tautan. Tentunya Anda tidak akan mengharapkan seseorang untuk memposting seluruh dokumentasi di sini?
djb
2
Ya, kami mengharapkan seseorang untuk memposting semua kode yang relevan di sini. Ini bahkan ditulis di situs FAQ - "Selalu mengutip bagian yang paling relevan dari tautan penting, jika situs target tidak dapat dijangkau atau offline secara permanen." Itu mungkin bukan seluruh konten sumber daya yang ditautkan tetapi dalam hal ini mungkin. Sebagaimana, ketika sumber daya GitHub menjadi tidak dapat diakses, jawaban ini menjadi tidak berarti.
s_ha_dum