Eğer okumadıysanız bu içeriği okumadan önce "NodeJS ile API Testi Nasıl Yapılır?" başlıklı içeriği okuyabilirsiniz.
İlk olarak, projenin ana dizininde terminal açılmalı ve Mocha, Chai ve isteğe bağlı olarak diğer test araçları yüklenmelidir. Bu işlem aşağıdaki komut kullanılarak yapılabilir:
$ npm install --save-dev mocha chai
Bu komut, Node.js projesi için Mocha ve Chai paketlerini yükleyecektir. Ardından, test dosyalarınızı bir klasörde toplamanız gerekmektedir.
Test dosyalarınızı oluşturduktan sonra testlerinizi yazabilir ve Mocha'ya yürütmesi için terminalde mocha komutunu kullanabilirsiniz. Mocha, testlerinizi otomatik olarak tespit edecek ve çalıştıracaktır.
Test işlemeleri esnasında kullanmak amacıyla yeni bir veri tabanı oluşturmak ve konfigürasyon dosyasında test ortamı için yeni oluşturulan veri tabanı bilgilerini girmek daha sağlıklı olacaktır. Bu sayede geliştirme ortamında kullanılan veriler zarar görmeden testler gerçekleştirilebilir. Sequelize ORM paketi ile geliştirme yapılırken oluşturulan migration ve seeder'ları değiştirmeden test veri tabanını belirterek tekrardan çalıştırmak mümkündür. Aşağıda örnek kullanım gösterilmiştir.
$ NODE_ENV=test npx sequelize-cli db:migrate
$ NODE_ENV=test npx sequelize-cli seed:all
Komut çalıştırırken test ortamında işlem yapmak için komutun başına NODE_ENV=test yazmanız yeterli olacaktır.
Öncelikle oluşturulan yeni veri tabanı için config.json dosyası içerisine test objesi eklenir ve yeni veri tabanı için gerekli giriş bilgileri belirtilir.
Ardından Sequelize ile oluşturulan migration'lar ve seeder'lar test ortamında çalıştırılarak ilişkiler ve kayıtlar oluşturulur.
Daha sonra ana dizin altında test klasörü oluşturulur ve içerisinde kullanılacak test dosyaları oluşturulur.
Kod kısmında ilk olarak yukarıda bahsedildiği üzere HTTP sorgularını doğrulayacak olan chai ve chaiHttp kütüphaneleri dahil edilir. Ardından HTTP istekleri atarken kullanmak için server kodunun yazılı olduğu index dosyası dahil edilir. Yazım kolaylığı sağlamak amacıyla chai assertion'ı olan should, değişkene atanarak kullanıma hazır hale getirilir. Son olarak HTTP isteklerini gerçekleştirebilmek adına chai'nin chaiHttp kütüphanesini kullanması sağlanır.
Örneğimizde testler User modeli ve işlevleri için yapılacağından ilk olarak describe() fonksiyonu olarak bir Users alanı tanımlanır ve oturum yahut çerez kullanımı için bu alan içerisinde agent tanımlanır. İlk blog yazısında bahsedildiği üzere bu sayede oturum kapanmadan isteklere devam edilebilir. Ardından beforeEach() hook'u içerisinde server'a giriş isteği atılır. Bu işlem esnasında veri tabanında kaydı bulunan bir kullanıcı adı ve şifre gönderilir. Bu sayede başarılı bir şekilde giriş işlemi gerçekleştirilir ve bu sayede oturumumuz başlamış olur. Should assertion'ı ile 200 değerinin döndüğüne emin olup done() komutu ile bu işlemi sonlandırırız. Bu sayede beforeEach() içerisinde her testten önce giriş yapılarak oturum başlatılmış olur ve diğer işlevlere erişim sağlanır.
Kayıt işlemi için yapılan bu teste describe() fonskiyonu ile başlanır. Ardından it fonksiyonu fonksiyonun işlevi ve geri dönüş değeri belirtilerek kullanılır. Daha sonra beforeEach içerisinde tanımlanan agent ile API içerisinde belirlenen adrese post isteği atılır ve gerekli alanlar .send() fonksiyonu ile gönderilir. .end() içerisindeyse geri dönüş değerinin isterlerimizi karşılayıp karşılamadığı kontrol edilir. Örnekte response değerinin statüsünün 200 olması, dönen değerin br obje tipinde olması, type ve message adında iki property bulundurması ve type'ın true değerine sahip olması beklenmektedir.
Kayıt işlemine benzer şekilde login işlemi için de test yazılmış ve aynı şema kullanılmıştır. BeforeEach metodu içerisinde kullanılan kullanıcıdan farklı bir kullanıcı ile test yapılmış bu sayede isterler daha sağlıklı bir şekilde karşılaştırılmıştır.
Get isteği içinde benzer şekilde adımlar uygulanmış ve dönüş değerinin statüsü ve obje olup olmadığı test edilmiştir.
Son olarak delete isteği için de benzer şekilde adımlar uygulanmış ve silinecek kullanıcı id'si parametre olarak istek içerisine dahil edilmiştir. Örnekte bu id manuel olarak verilmiştir. İsteğe bağlı olarak farklı yöntemler uygulanabilir.
Testimizi yürütürken her seferinde komut satırına uzun uzadıya argümanları ve ayarları yazmak yerine package.json dosyası içerisine script alanı altına test değişkeni eklenerek örnekteki gibi başta test ortamı belirtilerek mocha çerçevesi ile testin çalıştırılması gerektiği belirtilir ve npm test komutu ile kolayca ulaşılabilir.
Test yürütüldüğü takdirde beklenen çıktı aşağıda gösterilen şekildedir.
Geliştirme yaparken eslint kullanılıyorsa varsayılan ayarlar chai assertionları ile uygun çalışmayabilir. Bu durumda aşağıda belirtilen komut yardımıyla eslint-plugin-chai-friendly paketi indirilir.
.eslintrc.js dosyası içerisine overrides alanı açılarak test dosyalarında kullanmak üzere gerekli konfigürasyonlar eklenebilir.
Kodun tamamına https://github.com/kerem-ozt/customer-order-api adresinden ulaşılabilir.
Yazılım Geliştiricisi
E-Arşiv Fatura Nasıl İptal Edilir?
01/01/2020 itibarıyla e-Fatura mükelleflerine, vergi mükellefi olmayan ancak aynı gün içinde 30 bin TL’nin üzerinde fatura kesen ve aynı...
SAP Variant Configuration ile Ürünlerinizi Kişiselleştirmenin Yolu
Günümüzde müşteriler, ürünleri kendi tercihlerine göre özelleştirmek istiyor. Örneğin, bir bilgisayar satın alırken ekran boyutunu,...
React Hooks Nedir ve Nasıl Kullanılır?
React Hook'lara GirişHookların çıkışı React’in 16.8 versiyonunda başlamıştır. Class Componentlerin özelliklerini functional...
SAP TM Birleşik Paket Oluşturma ve Optimizer Planlama
Günümüz lojistik dünyasında, taşımacılığın en zorlu noktalarından biri yükleme ve planlama optimizasyonudur. Bir taşımanın maliyetini...
Fiori Hızlı Aktivasyonu (Fiori Rapid Activation) Nedir?
SAP Fiori, çeşitli cihazlarda SAP kullanıcı arayüzünü sadeleştirmek ve modernize etmek için tasarlanmış bir kullanıcı deneyimi (UX)...
SAP Signavio Process Intelligence Nedir?
SAP Signavio Process Transformation Suite’in bir ürünü olan SAP Signavio Process veri odaklı değişime odaklanan bir çözümdür....
Kaizen Çalışmaları Nasıl Yapılır?
Kaizen, süreçlerde, ürünlerde veya hizmetlerde küçük, artımlı değişiklikler yaparak önemli iyileştirmeler elde etme fikrine odaklanan...
İşletmeler Dijital Dönüşüm Yolculuğunun Neresinde?
Dijital dönüşüm, tüm şirketlerin büyümesinde önemli bir adımdır. Dijital dönüşümün amacı, işletmenizin daha başarılı olmasını...
Öneri Sisteminin Şirketler İçin Önemi
Özellikle büyük çaplı firmalarda, verimi artırmanın yolu çalışanların iş yeriyle ilgili problemlerini dinlemekten ve bu problemleri...
Mailiniz başarıyla gönderilmiştir en kısa sürede sizinle iletişime geçilecektir.
Mesajınız ulaştırılamadı! Lütfen daha sonra tekrar deneyin.