Teknoloji Pazarlama, Bloglarınızdan ve Gadget'larınızdan Para Kazanın

Mevcut Bir WordPress Eklentisine Birim Testleri Ekleme

Mevcut Bir WordPress Eklentisine Birim Testleri Ekleme

Şu ana kadar size WordPress eklentileriniz için testler oluşturma fikrini tanıtmaktan ve kodunuzu test etmeye daha derinlemesine dalmak için anlamanız gereken bir dizi ekstra terimden bahsetmekten biraz fazlasını yaptık. Bugün ücretsiz eklentilerimden birini alıp bunu nasıl bir araya getireceğinizi göstermek için birkaç birim testi ekleyerek bunu pratik hale getireceğiz.

Eklentiyi şurada bulabilirsiniz Github veya WordPress.org. Önceki yazımda olduğu gibi WP CLI'nin kurulu olduğunu ve temel testleri ayarlayabildiğinizi varsayıyorum. Sizi WordPress'te birim testine tanıtan gönderime göz atamıyorsanız.

Geçen seferkinin aksine, WordPress kurulumumuza aşağıdaki komutla başlayabilmemiz için yalnızca testleri yapılandırmamız gerekiyor.

wp scaffold eklenti testleri wptt-ics-feeds

Şimdi birkaç test yazmaya başlayalım.

Test etmek istediğim ilk şey, bir kullanıcının profilinde takvim yayınlarıyla birlikte gördüğü bağlantıların doğru olduğundan emin olmaktır. Özellikle şuna bakacağız: get_subscribe_link işlev.

Bu bölüm için tamamlanmış testleri görebilirsiniz Burada.

Varsayılan örnek test dosyasını kopyalayıp test-feed-links.php olarak yeniden adlandırarak başlayalım. Başa çıkmam gereken çok sayıda dosya olduğu anlamına gelse bile, testleri yazdığım eklentilerin alanları için her zaman farklı dosyalar oluşturmayı severim. Açıkça etiketlenmiş dosyalarla düzenli kalmak çok daha kolaydır.

Bu eklenti biraz daha eskidir ve başlarken global bir değişkeni başlatır. Bu, eklenti koduna erişebilmemiz için setUp işlevimizde bunu global olarak çağırmamıza olanak tanır. Ayrıca, o kullanıcıyla sağlanan bağlantıları test edebilmemiz için yeni bir kullanıcı oluşturmak için WordPress Factory'yi kullanmamız gerekecek. Bu, kurulum ve yırtma işlevlerimizin şu şekilde görünmesi gerektiği anlamına gelir.

genel işlev kurulumu()

ebeveyn::setUp();

// eklentiyi global hale getiriyoruz

Okumak:  Harika Anahtar Kelime Eşlemenin Avantajlarını Keşfedin

$this->eklenti = $GLOBALS[‘wptt_ics_feeds’];

// sahte kullanıcı oluştur

$this->editor = new WP_User( $this->factory->user->create( array( 'role' => 'editor' ) ) );

genel işlev gözyaşıDown()

ebeveyn::tearDown();

wp_delete_user( $this->editor->ID, true );

Artık yayın bağlantılarımız için bir test yazmaya başlayabiliriz. Link fonksiyonunun içinde bulunabileceği her iki durumu da test etmek için iki farklı test yazacağız. İlk olarak get_subscribe_link() fonksiyonunu herhangi bir argüman olmadan test edeceğiz.

/**

* Yazar olmadan temel besleme bağlantısını test eder

*/

genel işlev test_base_feed_link()

$feed_link = $this->eklenti->get_subscribe_link();

$complete_link = site_url() . '/?feed=wptticsfeeds';

$this->assertEquals( $feed_link, $complete_link, 'Yayın bağlantıları eşit değil' );

Yukarıdaki kodun yaptığı ilk şey, setUp işlevinde tanımlandığı gibi eklenti örneğimize erişmek ve get_subscribe_link() işlevini çağırmaktır. Daha sonra, karşılaştırma yapabileceğim bir şey olması için fonksiyonun beklenen çıktısını sabit kodluyorum. Son olarak kullanıyoruz iddiaEşittir iki değeri karşılaştırmak için.

Bunu yaptıktan sonra terminale geri dönebilir ve testleri phpunit komutuyla çalıştırabilirim. Testlerim başarılı olursa aşağıdaki çıktıya benzer bir şey göreceğim. Geçemezlerse yeşil çubuk yerine büyük kırmızı bir uyarı alacağım, bu da neden geçemediklerini bulmam ve testleri düzeltmem gerektiği anlamına geliyor.

Bu durumda testlerimiz başarılı oldu ve eğer bir yazar adı girersek link fonksiyonumuzun çıktısını test etmeye geçebiliriz. Bu testi aşağıda görebilirsiniz.

/**

* Yazarla feed bağlantısını test eder

*/

genel işlev test_author_feed_link()

$feed_link = $this->plugin->get_subscribe_link( array( 'yazar' => $this->editor->ID ) );

$complete_link = esc_url( site_url() .'/?feed=wptticsfeeds&wpttauthor=”.$this->editor->user_login );

$this->assertEquals( $feed_link, $complete_link, “Yazarın bulunduğu feed bağlantıları eşit değil' );

Burada daha önce bağlantımızı test ettiğimizde yaptığımızın hemen hemen aynısını yapıyoruz. Buradaki değişiklik, setUp fonksiyonumuzla oluşturduğumuz kullanıcıyı aktarmamız ve ardından bu bağlantının iddiaEquals ile beklendiği gibi çıktığından emin olmak için test etmemizdir.

Şimdi eklentinin içindeki özel filtreyi test etmeye geçelim.

PHPUnit ile WordPress Filtresini Test Etme

Geçmişte filtrelerin test edilmesi konusunda diğer geliştiricilerle bazı anlaşmazlıklar yaşadım. Bazıları dahili eklenti filtrelerini test etme zahmetine girmiyor, ancak bence bu filtreleri test etmeniz gerekiyor. Bazen filtre adları değişir ve bunu unutursunuz; bu nedenle bunu hiçbir yerde belgelemeyin veya filtrenin kullanımını kontrol etmeyin. Filtreniz için basit bir test yazmak bunu vurgulayacaktır çünkü filtre adını değiştirdiğinizde bir test hatası meydana gelecektir.

Okumak:  Arama Devlerinin Savaşı: Google Arama vs. Bing - Hangisi Size Uygun?

Bu test için test-filters.php adlı testler klasörümüze yeni bir dosya ekleyeceğiz. Bu dosyayı gelecekte eklentide test edilmesi gereken tüm filtreleri test etmek için kullanacağım. Bu sefer setUp fonksiyonumuzun yalnızca eklentimizin bir örneğini başlatması gerekiyor ve gözyaşı fonksiyonumuzun hiçbir şey yapmasına gerek yok. Aşağıdaki koda bakın.

genel işlev kurulumu()

ebeveyn::setUp();

// eklentiyi global hale getiriyoruz

$this->eklenti = $GLOBALS[‘wptt_ics_feeds’];

genel işlev gözyaşıDown()

ebeveyn::tearDown();

Daha sonra filtremiz için aşağıda görebileceğiniz testi yazmamız gerekiyor.

/**

* Zamanın bir filtre ile değiştirilebildiği gönderiyi test eder

*/

genel işlev test_posts_where_filter()

add_filter( 'wptt_ics_feeds_how_old', array( $this, 'new_where'), 10, 2 );

$output = $this->plugin->two_months( '' );

$tarih = tarih('Ym-d', strtotime( $this->new_where() ) );

$this->assertStringContainsString( $date, $output, 'Tarih filtresi işe yaramadı' );

genel işlev new_where()

'-1 hafta' değerini döndür;

Yaptığımız ilk şey filtremizi çağırmak ve ardından ona new_where fonksiyonumuzu iletmektir. Filtre testleri için her zaman ayrı bir fonksiyon yazmayı severim çünkü bunları birden fazla testte yeterince kullandım ve bunun daha sonra iş tasarrufu sağladığını hissettim. New_where işlevimiz -1 hafta dizesini filtremize iletecektir.

Daha sonra eklentinin içindeki two_months() fonksiyonumuzu çağırıyoruz. Sonra standart bir PHP kullanıyoruz tarih tarih için beklediğimiz formatı elde etmek için işlev. Çoğunlukla kullandığım eklentide tarihin doğru şekilde ayrıştırıldığından endişe duyduğum için iddiaStringContainsString two_months işlevinin çıktısının $date değişkeniyle aynı tarih dizesini içerip içermediğini kontrol etmek için.

Tekrar ediyorum, eğer testleriniz geçerse, o zaman hepsi yeşil olmalıdır. Başarısız olurlarsa hoş yeşil çubuk yerine büyük kırmızı bir uyarı alırsınız.

ICS Feed Çıkışını Neden Test Etmiyoruz?

ICS beslememizin son çıktısını test etmediğimi unutmayın. Bu mümkün olsa da, arızalanabilecek ve kodumla hiçbir ilgisi olmayan bir sürü hareketli parça var. ICS akışını çevrimiçi doğrulayıcıya gönderebilir ve ardından JSON yanıtını alıp geçerli olup olmadığını kontrol etmek için ayrıştırabilirim.

Okumak:  Satılık Metal Frenler: Yüksek Kaliteli ve Uygun Fiyatlı Seçenekler Artık Mevcut

HTTP isteği başarısız olursa testim başarısız olur. Çevrimiçi doğrulama hizmeti kapanırsa testim başarısız olur. Benim hatam olmayan sebepsiz yere testimin başarısız olmasına neden olabilecek bir sürü başka senaryo da var. Bu nedenle son feed'i programlı olarak test etmemeyi seçtim ve takvimimdeki bir feed'e abone olarak ve gönderilerimin aslında beklendiği gibi takvimde olduğunu görerek bunu test edebileceğimi düşündüm.

Bu Birim Testi Değil

Eminim bazılarınız buna bakıyor ve birim testleri yazmadığımı söylüyor ve haklısınız. Entegrasyon testleri yazıyorum çünkü kodum, testlerin çalışması için WordPress ile entegre oluyor. Evet, kullanabilirsin WP_Mock Gerçek birim testleri yazmak için WordPress'i taklit etmek, ancak çoğu zaman kodumun çalışmasını önemsiyorum ile WordPress.

Bugün, testlerin projeleriniz için nasıl çalışabileceğinin pratik bir örneği olarak mevcut bir WordPress eklentisine birkaç test eklemeye baktık. Öğrenmeye devam etmek için, bir işletme sahibi olarak sürecinize test eklemeye yönelik iş senaryosuna göz atın. Geliştirme daha uzun süreceği için ön harcamaların ötesini görmek zor olabilir, ancak karşılığını veriyor.