WP_UnitTestCase fabrika sınıfları için belgeleri nereden bulabilirim?


21

Son sürümlerde WP_UnitTestCasebir $factoryözellik içeriyor .

Örneğin:

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

Bu kullanışlı özellik hakkındaki belgeleri nereden bulabilirim?

Yanıtlar:


26

Bildiğim kadarıyla, şu anda bunun için hiçbir belge yok. Resmi kaynak burada .

Ayrıca, bu özellik hakkında biraz ayrıntılı bilgi veren WordPress eklentilerini test eden bir eğitim yazdım .

Kullanmanın avantajlarından biri WP_UnitTestCasefabrikalarıdır. Bunlara factoryüye değişkeni üzerinden erişilebilir . Bu factory, her biri include / factory.php içinde tanımlanan sınıflardan birinin bir örneği olan özelliklere sahip bir nesnedir . Ne yaparlar? Testinizde ihtiyaç duyduğunuz her yerde kullanıcılar, yazılar, şartlar vb. Oluşturmayı çok kolaylaştırır. Yani, bunu yapmak yerine:

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

Bunu sadece yapabilirsiniz:

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

Ama bekleyin, daha da iyi olur. Pek çok kullanıcıya (veya gönderilere veya her neyse) ihtiyacınız olursa? Bunları yalnızca toplu olarak oluşturabilirsiniz:

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

Bu, testinizde kullanabileceğiniz 25 kullanıcı yaratacaktır.

factoryKendinizin kullanabileceği aşağıdaki özelliklere sahiptir:

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

Hepsi, yukarıdaki örnekte gösterildiği gibi $userfabrika ile aynı şekilde kullanılabilir . Örneğin, şöyle bir yazı oluşturabilirsiniz:

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

Nesneyi oluşturmak için kullanılacak belirli argümanlar da belirleyebilirsiniz. Yukarıdaki örnekte bir yayın oluşturduk, ancak belirli bir kullanıcıya atanmadı ( post_authoralan varsayılan olarak 0). Bazen gönderinin bir kullanıcıya atanmasını isteyebiliriz. Bunu böyle yapardık:

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

Ayrıca, oluşturduğunuz nesnenin kimliğinden daha fazlasına ihtiyacınız varsa, bunu yapmanız gerekmez:

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

Bunun yerine, create_and_get()yöntemi kullanın :

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

Bu örnekte, postfabrikayı kullandık , ancak aynı şey tüm fabrikalar için de geçerli.

Sanırım bunu WordPress docs ekibine söyleyeceğim. Belki bu şeyleri eklenti ve tema el kitaplarına yerleştirebiliriz.

Güncelleme (20 Haziran 2015): Kendi özel fabrikalarını da oluşturabilirsin !

Güncelleme (27 Eylül 2016): WordPress 4.4'te testlerfactory() fabrikalara erişim için statik bir yöntem sağlamak üzere güncellendi , ancak factoryözellik hala bir büyü alıcı tarafından sağlanıyor.


Etki alanı öldü ve öğreticinin bağlantısı da öyle. Taşındı mı?
Josh Habdas

@JoshH Şimdi yedeklenmiş gibi görünüyor. Site gecenin ortasında (saat dilimimde) yedek çalışırken, muhtemelen onu vurmuşsunuzdur.
JD

@JoshH Testler için prosedür kodunu kullanan herhangi bir birim test çerçevesini bilmiyorum. Prosedürel bir test çerçevesinin, nasıl çalışması gerektiğine bağlı olarak, neredeyse bir OO olanı kadar çalışacağından şüpheliyim. Ancak, testlerin PHPUnit gibi nesne yönelimli bir çerçeve üzerine inşa edilmesi, sadece OO kodunu test edebileceklerini belirlemez. Eklentilerimde bir çok prosedürel kod var ve aynı şekilde test ediyorum. WordPress ayrıca birçok prosedür kodunu bu şekilde test eder. Bu yüzden sorun olmamalı.
JD

Thanks @JD İdealleri de bu şekilde yazmak istiyorum. Ama ana kodlayıcıda olmadığı için OOP'a göndereceğim. PS Blogunuza yorum göndermeyi denedim ve bir hata aldım. squinty face Ne olursa olsun, 411 için teşekkürler
Josh Habdas

1
@JoshH Yorumlarla ilgili sorununuzu bildirdiğiniz için teşekkür ederiz, bunun şimdi düzeltilmesi gerekir. Aşırı derecede spam karşıtı bir eklenti neden oldu.
JD

2

Kaynak kodu

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

Şu an bakmak için en iyi yer gibi görünüyor


2
Sadece bağlantıyı sorunuzdan kaldırın: Ne okursunuz? Lütfen her zaman dış kaynaklara dayanmayan cevaplar yazınız. Aksi halde cevabınızı silmemiz gerekir.
kaiser

2
@kaiser, nereden geldiğini anlıyorum, ancak sorumun cevabı bir bağlantı olacak. Elbette birisinin tüm belgeleri buraya göndermesini beklemediniz mi?
djb

2
Evet, birilerinin ilgili tüm kodu buraya göndermesini bekleriz . Bu bile sitenin SSS bölümüne yazılmıştır - "Hedef siteye ulaşılamaması veya sürekli olarak çevrimdışı kalması durumunda, her zaman önemli bir bağlantının en alakalı bölümünü alıntılayın." Bu, bağlı kaynağın tüm içeriği olmayabilir, ancak bu durumda olabilir. Bu GitHub kaynağına erişilemediğinde, bu cevap anlamsız hale gelir.
s_ha_dum
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.