Bir API barındırmak, çalıştığından emin olma sorumluluğunu taşır. Bunu Mocha gibi bir araçla otomatikleştirilmiş test yapmaktan daha iyi veya daha kolay bir yolu yoktur.

Modern yazılım geliştirme, API'lerden büyük ölçüde yararlanır. İstemci tarafı uygulamalar ile arka uç uygulamaları arasında olduğu kadar farklı dahili veya harici uygulamalar arasında da önemli bir bağlantı görevi görürler.

API'ler, yazılım bileşenlerinin birbirleriyle sorunsuz bir şekilde etkileşime girmesine izin vererek sorunsuz iletişim ve veri alışverişine izin verir. Sorunsuz bir kullanıcı deneyimi sunmak ve sistemin genel bütünlüğünü korumak için bu API'lerin güvenilirliğini, işlevselliğini ve performansını sağlamak son derece önemlidir.

Bu nedenle, üretim ortamlarında olası sistem arızalarını önlemek için geliştirme sırasında hataları işaretlemek ve düzeltmek için API'lerinizi kapsamlı bir şekilde test etmeniz önemlidir.

Node.js API'lerini Mocha, Chai ve Chai-HTTP Kullanarak Test Etme

Moka çeşitli uygulamalarla uyumlu, yaygın olarak kullanılan bir test çerçevesidir.

instagram viewer
JavaScript çerçeveleri. Temel özelliklerinden biri, test senaryolarını etkili bir şekilde yönetme ve yürütme sürecini basitleştiren esnek bir test çalıştırıcısıdır.

Ayrıca, çok çeşitli test senaryolarına izin vererek, eşzamanlı ve eşzamansız testler dahil olmak üzere çeşitli test stillerini destekler.

Diğer taraftan, Çay Ve Chai-HTTP Mocha ile birlikte kullanabileceğiniz iddia kitaplıklarıdır. Chai, must, wait ve iddia gibi çok çeşitli ifade edici ve okunabilir iddia arayüzleri sağlar. Chai'nin bir uzantısı olan Chai-HTTP ise, HTTP isteklerini test etmek ve yanıtlarını onaylamak için özel olarak tasarlanmış bir arabirim sağlar.

Mocha'yı Chai ve Chai-HTTP ile birlikte kullanarak API'leri etkili bir şekilde test edebilirsiniz. Test iş akışı şunları içerir:

  • Belirtilen API uç noktalarına HTTP istekleri yapmak.
  • Beklenen yanıtların tanımlanması.
  • Belirtilen kaynaktan alınan verileri, HTTP durum kodlarını ve daha fazlasını doğrulama.

Bu gibi durumlarda oluşabilecek API hata testi senaryolarını ve meydana gelmesi durumunda hangi aksiyonların tetiklenmesi gerektiğini de simüle edebilirsiniz.

Bu projenin kodunu kendi içinde bulabilirsiniz. GitHub deposu.

Express.js Projesini ve MongoDB Veritabanını Kurun

Başlamak, bir Express web sunucusu oluşturun, ve şu paketleri kurun:

npm cors dotenv firavun faresi mongodb'u kurar

Sonraki, bir MongoDB veritabanı oluşturun veya bulutta bir MongoDB kümesi yapılandırın. Ardından, veritabanı bağlantı URL'sini kopyalayın, bir .env dosyasını kök dizine kopyalayın ve veritabanı bağlantı dizesine yapıştırın:

CONNECTION_STRING="bağlantı dizisi"

Kurulum işlemini tamamlamak için veritabanı bağlantısını yapılandırmanız ve kullanıcı verileriniz için veri modellerini tanımlamanız gerekir. Aşağıdakiler için bu projenin GitHub deposundaki koda bakın:

  • Veritabanı bağlantısını yapılandırın, içinde araçlar/db.js.
  • Kullanıcı veri şemasını şurada tanımlayın: modeller/user.model.js.

API Yolları için İşleyici İşlevlerini Tanımlayın

Denetleyici işlevleri, veritabanındaki kullanıcı verilerinin eklenmesini ve alınmasını yönetecektir. Bu işleyici işlevlerinin işlevselliğini sağlamak için, veritabanından verileri başarıyla gönderip getirip getiremeyeceklerini test edeceksiniz.

Kök dizinde bir oluşturun controllers/userControllers.js dosyasını açın ve aşağıdaki kodu ekleyin:

sabit kullanıcı = gerekmek('../modeller/kullanıcı.model');

export.registerUser = zaman uyumsuz (gerekli, res) => {
sabit { kullanıcı adı, şifre } = req.body;

denemek {
beklemek User.create({ kullanıcı adı, şifre});
res.status(201).Göndermek({ İleti: "Kullanıcı başarıyla kaydedildi" });
} yakalamak (hata) {
konsol.log (hata);
res.status(500).Göndermek({ İleti: 'Bir hata oluştu!! ' });
}
};

export.getUsers = zaman uyumsuz (gerekli, res) => {
denemek {
sabit kullanıcılar = beklemek Kullanıcı.bul({});
res.json (kullanıcılar);
} yakalamak (hata) {
konsol.log (hata);
res.status(500).Göndermek({ İleti: 'Bir hata oluştu!!' });
}
};

API Yollarını Tanımlayın

Yeni bir tane oluştur yollar/userRoutes.js dosyasını kök dizine kopyalayın ve aşağıdaki kodu ekleyin.

sabit ifade = gerekmek('ifade etmek');
sabit yönlendirici = ekspres. Yönlendirici();
sabit userControllers = gerekmek('../kontrolörler/kullanıcıKontrolcüler');

yönlendirici.post("/api/kayıt", userControllers.registerUser);
yönlendirici.get("/api/kullanıcılar", userControllers.getUsers);
modül.export = yönlendirici;

Sunucu Giriş Noktanızı Tanımlayın

güncelleyin sunucu.js aşağıdaki kod ile dosya.

sabit ifade = gerekmek('ifade etmek');
sabit korlar = gerekmek('kors');
sabit uygulama = ekspres();
sabit bağlantı noktası = 5000;
gerekmek('dotenv').config();
sabit bağlantıDB = gerekmek('./utils/db');

connectDB();

app.use (express.json());
app.use (express.urlencoded({ uzatılmış: doğru }));
app.use (kors());

sabit kullanıcıYolları = gerekmek('./routes/userRoutes');
uygulama.kullan('/', kullanıcıRoutes);

app.listen (bağlantı noktası, () => {
konsol.kayıt(`Sunucu şu saatte dinliyor: http://localhost:${bağlantı noktası}`);
});

modül.exports = uygulama;

Mocha İle Test Senaryolarını Yazma ve Yürütme

Kullanıcı API'si yerindeyken devam edin ve test ortamını yapılandırın. İlk olarak, bu paketleri geliştirici bağımlılıkları olarak kurun.

npm mocha chai chai-http --save-dev'i kurun

Şimdi, aşağıdaki betiği package.json dosyanıza ekleyin.

"Kodlar": {
"Ölçek": "mocha --zaman aşımı 10000"
},

Bu komut, test senaryolarını yürütür; timeout özelliğinin uygun bir değerle eklenmesi, bireysel test senaryolarının yürütülmesi için izin verilen maksimum süreyi kontrol etmenize olanak tanır.

Bu, testlerin süresiz olarak çalışmasını veya test senaryoları bitmeden çok hızlı tamamlanmasını önlemek için yararlı olabilir.

API Uç Noktalarını Test Edin

Kök dizinde yeni bir klasör oluşturun ve adlandırın Ölçek. Bu klasörün içinde yeni bir tane oluşturun. user.tests.js dosyasını açın ve POST bitiş noktası test durumu için aşağıdaki kodu ekleyin.

sabit çay = gerekmek("çay");
sabit chaiHttp = gerekmek("chai-http");
sabit uygulama = gerekmek('../sunucu');

chai.use (chaiHttp);
sabit beklemek = chai.expect;

betimlemek("Kullanıcı API'sı", () => {
betimlemek("POST /api/kayıt", () => {
BT('kullanıcı kaydını işlemelidir', (bitti) => {
chai.request (uygulama)
.postalamak("/api/kayıt")
.Göndermek({ Kullanıcı adı: "deneme Kullanıcısı", şifre: "şifreyi test et" })
.son((hata, res) => {
eğer (hata) {
(res).to.have.status(500);
(res.body).to.have.property('İleti').bu.is.eşit('Bir hata oluştu!!');
} başka {
(res).to.have.status(201);
(res.body).to.have.property('İleti').eşit("Kullanıcı başarıyla kaydedildi");
}

Tamamlandı();
});
});
});
});

Bu kod, kullanıcı API'sinin kullanıcı kayıt işlevselliğini test etmek için Chai ve Chai HTTP kullanan bir test durumu tanımlar.

Belirtilen uç noktaya bir POST isteği gönderir ve kullanıcı kaydı işlevinin başarılı olup olmadığını veya bir hata oluşup oluşmadığını doğrulayarak beklenen API yanıtı hakkında iddialarda bulunur.

Test senaryosunun ana bileşenlerinin dökümü aşağıda verilmiştir:

  • beklemek -Bu nesne, API'den beklenen yanıt hakkında iddialarda bulunmak için Chai onaylama yöntemlerini kullanmanıza izin verir.
  • betimlemek - İlgili test durumlarını birlikte açıklar, bu durumda ilgili testler Kullanıcı API'sı. Yuvalanmış açıklama bloğu, ilgili test senaryolarını daha fazla gruplandırır; bu durumda, POST /api/kayıt. Bu, özellikle belirli bir işlevle ilgili test senaryolarının düzenlenmesine yardımcı olur.
  • BT - Bu işlev, API bitiş noktasının beklenen davranışını açıklar.
  • son - Bu işlev, isteği gönderir ve yanıtı işlemek için bir geri arama işlevi sağlar. Geri arama işlevi, beklemek API'den alınan yanıtı kontrol etme işlevi.
  • Tamamlandı - Bu işlev, test senaryosunun sonunu işaretlemek için çalışır.

Son olarak, GET uç noktası test senaryosunun kodunu POST uç nokta test senaryosunun hemen sonrasına ekleyin.

betimlemek('GET /api/users', () => {
BT('tüm kullanıcı verilerini getirmeli', (bitti) => {
chai.request (uygulama)
.elde etmek("/api/kullanıcılar")
.son((hata, res) => {
eğer (hata) {
(res).to.have.status(500);
(res.body).to.have.property('İleti').bu.is.eşit("Kullanıcı verileri alınırken bir hata oluştu");
} başka {
(res).to.have.status(200);
(res.body).to.be.an('sıralamak');
}

Tamamlandı();
});
});
});

Devam edin ve iki test senaryosunu yürütmek için terminalinizde test komut dosyasını çalıştırın.

npm testi

Test senaryolarının yürütülmesi herhangi bir hatayla karşılaşmazsa, testlerin başarıyla geçtiğini gösteren benzer çıktılar görmelisiniz.

Veritabanına yapılan HTTP istekleri sırasında ağ bağlantısı sorunları, gerekli verilerin eksik olması, mantıksal hatalar ve diğer sorunlar gibi çeşitli nedenlerle test hataları oluşabilir.

Mocha, terminal penceresinde görüntülenen günlüklerde net ve ayrıntılı test raporları sağlayarak bu tür hataları belirleme ve vurgulama konusunda iyi bir iş çıkarıyor. Bu, test hatalarına neden olan belirli sorunları kolayca tanımlamanıza ve tanılamanıza olanak tanır.

Mocha, API'lerinizi Test Etmemeniz İçin Size Hiçbir Mazeret Vermiyor

Postman gibi araçları kullanarak API'lerinizin işlevselliğini manuel olarak test ederken, geçerli bir testtir yaklaşımı, otomatik test için Mocha ve diğer test çerçevelerinden yararlanmak, onu bir sonraki aşamaya taşıyor seviye.

Bu test araçlarıyla, çok çeşitli senaryoları ve uç durumları kapsayacak şekilde testleri hızlı ve kolay bir şekilde otomatikleştirebilirsiniz. Bu, API'lerinizi dağıtmadan önce hataları hızlı bir şekilde tespit etmenizi ve çözmenizi sağlayarak yüksek kaliteli yazılımları üretime göndermenizi sağlar.