WP-CLI Paketleri için İşlevsel Testler Yazma


Son makalem, yerel WordPress site kurulumunu otomatikleştirmeyle ilgili kısa bir dizinin parçasıydı. Bu seride, WordPress geliştirme ortamlarının yüklenmesine ve kaldırılmasına yardımcı olan bir WP-CLI paketi oluşturduk ve hatta onu WP-CLI Paket Dizini'ne gönderdik. Komut, Paket Dizininde herkesin kullanımına açık olduğundan, komutu geliştirmek ve herkes için çalıştığından emin olmak mantıklıdır.

Bu yazıda, WordPress kurulumlarını otomatikleştirmeye biraz ara vereceğiz ve her şeyin beklendiği gibi çalıştığından emin olmak için bazı işlevsel testler yazmaya başlayacağız. Ben wp installer komutu için testleri yazarken, aynı kavramlar herhangi bir WP-CLI paketi için geçerli olmalıdır.

Fonksiyonel Testler? Birim Testleri mi demek istiyorsun?

PHPUnit gibi birim testi ve araçları muhtemelen duymuşsunuzdur. Birim testleri, projelerinizdeki belirli işlevleri veya yöntemleri test etmenin ve daha çok şeylerin kod tarafına odaklanmanın harika bir yoludur.

İşlevsel testler birim testlerine benzer, ancak mevcut kodunuzun düzgün çalıştığını doğrulamak için kod yazmak yerine, belirli bir özelliğin nasıl davranmasını beklediğinizi insan tarafından okunabilir terimlerle açıklamanız bakımından farklılık gösterir. Bu, örneğin Gherkin adlı bir dil kullanılarak yapılabilir.

Bu, özellikle WP-CLI için yararlıdır, çünkü kodunuzun düzgün çalıştığını ve kullanıcıya görüntülenen herhangi bir çıktının beklenenle eşleştiğini onaylamanıza olanak tanır.

Behat'a Başlarken

WP-CLI, işlevsel testlerini çalıştırmak için Behat'ı kullanır, bu durumda bizim de yapacağımız şey bu. Behat'a henüz aşina değilseniz, ne olduğu ve nasıl çalıştığı hakkında temel bir fikir edinmek için resmi belgelere göz atmaya değer olabilir.

Bu makaledeki testleri yazarken takip etmek isterseniz, [email protected]:mattgrshaw/wp-installer.git kullanarak WP Installer Git deposunu kopyalayabilirsiniz. Alternatif olarak, test yazmak istediğiniz diğer WP-CLI paketleri için aynı temel adımları takip edebilirsiniz.

Ardından, zaten kurulu değilse, wp package install wp-cli/scaffold-package-command wp scaffold package komutunu kurun. wp scaffold package tests . . Son olarak, test ortamını kurmak için bin/install-package-tests.sh çalıştırın.

Bu yapıldıktan sonra, her şeyin çalıştığını doğrulamak için proje dizininde ./vendor/bin/behat çalıştırabilirsiniz:

ekran görüntüsü-2016-12-14-at-2-34-30-pm

Gördüğünüz gibi, paket testleri iskeleye koyduğumuzda bir örnek test dahil edildi. Bu, features/load-wp-cli.feature ve Gherkin'de işlevsel testler yazmaya aşina değilseniz bir göz atmaya değer. Aksi takdirde, o dosyayı silebilir ve kendi testlerinizi yazmaya başlayabilirsiniz.

Bazı Testler Yazma

İyi şeylere gelince, çoğunlukla düz İngilizce ile yazıldığından kendi testlerimizi yazmak çok kolay. Örneğin, paketin etkinleştirildiğini ve wp help installer komutunun istendiği gibi çalıştığını doğrulayan temel bir test oluşturalım. Bu, aşağıdaki içeriklerle features/load-wp-installer.feature dosyası oluşturularak yapılabilir:

 Feature: Test that WP Installer loads. Scenario: WP Installer loads correctly Given a WP install When I run `wp help installer` Then STDOUT should contain: """ wp installer <command> """

Bu testte, Behat'a wp help installer çalıştırmasını ve komut çıktısının yalnızca WP-CLI paketi doğru yüklendiğinde var olması gereken bir dize içerdiğinden emin olmasını söylüyoruz. Behat, "Verilen", "Ne zaman" ve "Sonra" gibi belirli anahtar kelimeleri ve kelime öbeklerini alır. Ama bütün bunlar nereden geliyor? Bir “WP kurulumunun” ne olduğunu ve onunla ne yapması gerektiğini nasıl biliyor?

features/steps bakarsanız, üç dosya görürsünüz: given.php , then.php ve when.php . Bu dosyaların her biri, anahtar sözcüğü kullanmak için gerekli bilgileri içerir. features/steps/given.php içinde tanımlanan bazı adımlara bir göz atın:

 $steps->Given( '/^wp-config\.php$/', function ( $world ) { $world->create_config(); } ); $steps->Given( '/^a database$/', function ( $world ) { $world->create_db(); } ); $steps->Given( '/^a WP install$/', function ( $world ) { $world->install_wp(); } );

Her adım, ilk parametre için bir RegEx ifadesi ve bu ifade eşleşirse çağrılacak bir işlev içeren Given() adlı bir yöntemi çağırır. Aynı biçim, features/steps/then.php ve feature features/steps/when.php steps/while.php içinde tanımlanan adımlar için de geçerlidir.

Bazı şeyleri asmak için başka bir test yazmayı deneyelim. wp installer install komutu, yeni WordPress kurulumları oluşturmaktan sorumludur, bu nedenle kurulumların oluşturulduğundan ve komutun beklendiği gibi davrandığından emin olmak için biraz test kapsamı eklemek iyi olur.

Bunu yapmak için features/installer-install.feature adresinde yeni bir dosya oluşturun:

 Feature: Test the `wp installer install` command. Scenario: Install WordPress When I run `wp installer install wptest --site_base_path=/tmp/ --dbuser=root --dbpass=root --dbhost=127.0.0.1` Then STDOUT should contain: """ Downloading WordPress... Creating wp-config.php... Creating the database... """ And the /tmp/wptest directory should contain: """ index.php license.txt readme.html wp-activate.php wp-admin wp-blog-header.php wp-comments-post.php wp-config-sample.php wp-config.php wp-content wp-cron.php wp-includes wp-links-opml.php wp-load.php wp-login.php wp-mail.php wp-settings.php wp-signup.php wp-trackback.php xmlrpc.php """

Yukarıdaki test, komut çıktısının beklediğimizle eşleştiğini doğrular ve ayrıca WordPress dosyalarının dizinde bulunduğunu ve wp-config.php dosyasının oluşturulup yapılandırıldığını doğrulamak için bazı ek adımlardan yararlanır. ihyaç olduğu gibi.

Test edilen komutun başlığı altında çok şey oluyor olsa bile, aynı testte UI'yi (çıktı) ve komutun işlevselliğini test edebilmek kesinlikle yararlıdır.

Kendi Adımımızı Oluşturmak

Şimdiye kadar Given , Then ve And adımlarını kullandık ve bunlar paket testlerini oluştururken bize zaten sağlandı. Peki ya henüz kapsanmamış bir şeyi kontrol etmek için kendi özel adımımızı eklememiz gerekirse?

Bu durumda, WordPress dosyalarının oluşturulduğunu ve wp-config.php dosyasının oluşturulduğunu zaten biliyoruz. Ancak testler, veritabanının kurulum için oluşturulup oluşturulmadığını kontrol etmez. features/steps/then.php yeni bir adım ekleyerek bu kontrolü kolayca ekleyebiliriz:

 $steps->Then( '/^the database for the install at (.+) should (exist|not exist)$/', function( $world, $path, $action ) { $proc = Process::create( 'wp db tables', $path ); $result = $proc->run(); if ( 'exist' === $action && 1 === $result->return_code ) { throw new Exception( $world->result ); } elseif ( 'not exist' === $action && 0 === $result->return_code ) { throw new Exception( $world->result ); } } );

Adımın ilk bölümündeki RegEx, WordPress kurulumunun yolunu ve veritabanının var olup olmadığını kontrol eder ve bu bilgiyi ikinci parametrede tanımlanan fonksiyona iletir. Bu işlev daha sonra sağlanan yolda wp db tables çalıştıran, veritabanının kurulu olduğunu ve WordPress veritabanı tablolarını içerdiğini doğrulayan bir işlemi başlatır.

Şimdi, wp installer install komutu kullanılarak veritabanının başarıyla oluşturulup oluşturulmadığını test etmek için bu adımı kullanabiliriz. installer-install.feature içinde test edilen senaryoya aşağıdaki satırı ekleyin:

 And the database for the install at /tmp/wptest should exist

Şimdi ./vendor/bin/behat çalıştırdığımızda, dosyalar yüklendiyse ve veritabanı başarıyla oluşturulduysa geçmesi gereken güncellenmiş testlerimizi görmeliyiz:

Sonraki adımlar

WP Installer projesiyle geliştirilebilecek çok daha fazlası var – daha iyi test kapsamı, farklı ortamlar ve kurulumlar için daha iyi destek ve yerel WordPress kurulumlarıyla çalışmayı olabildiğince kolaylaştıracak daha fazla özellik. İşlevsel testler yazma konusunda sağlam bir kavrayışla, bunların hepsi çok daha kolay görünüyor.

İşlevsel testler, herhangi bir kod yazmadan önce komutun nasıl görünmesi gerektiği ve ne yapması gerektiği konusunda durup düşünmenize yardımcı olduğundan, davranışa dayalı geliştirme için gerçekten çok uygundur. Ayrıca, herhangi bir test yazma alışkanlığı edinmek, şüphesiz hem geliştirici hem de proje yürütücüsü olarak size yardımcı olabilir.

Daha önce işlevsel testler yazdınız mı (Gherkin/Behat veya başka bir araç kullanarak)? Gelecekte yapma ihtimalin olan bir şey mi? Aşağıdaki yorumlarda bana bildirin.

Copyright statement: Unless otherwise noted, this article is Collected from the Internet, please keep the source of the article when reprinting.

Check Also

Divi's Theme Builder ile Özel Global Başlık Nasıl Oluşturulur

Artık Tema Oluşturucu burada olduğuna göre, web sitenizi A'dan Z'ye kurmanıza yardımcı olacak yeni eğitimlere dalmak için sabırsızlanıyoruz. Buna Divi'nin yerleşik seçeneğini kullanarak özel başlıklar oluşturma da dahildir. Bu eğitimde Divi's Theme Builder'ı kullanarak global bir başlık oluşturmaya odaklanacağız. Bu sayfaya veya gönderiye farklı bir başlık atamadıysanız, web sitenizin her yerinde genel bir başlık görünecektir.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir