• Buradasın

    React Native ve JavaScript Unit Testing Eğitimi

    youtube.com/watch?v=G2bxa_rTZaY

    Yapay zekadan makale özeti

    • Bu video, bir eğitmen tarafından sunulan React Native ve JavaScript için kapsamlı bir unit testing eğitim dersidir.
    • Video, unit testing'in önemi, farklı test framework'leri (Jest, Mocha, React Testing Library) ve code coverage kavramları ile başlayıp, Jest'in temel kullanımını, describe ve it blokları, expect fonksiyonları gibi yapıları detaylı şekilde anlatmaktadır. Eğitim, senkron ve asenkron test senaryoları, fake timer kullanımı, promise testleri ve spy konsepti gibi pratik konuları içermektedir.
    • Eğitimde ayrıca test kodlarının temiz ve disiplinli yazılması, her iterasyonda yeni bir instance oluşturulması, testlerin birbirini etkilememesi gibi önemli prensipler vurgulanmaktadır. Büyük projelerde database simülasyonu yapma, fake database oluşturma ve backend testleri için dikkat edilmesi gereken noktalar da ele alınmaktadır. Visual Studio Code'da Jest ile debug yapılandırması yapma konusuna da değinilmektedir.
    00:11Unit Test ve JavaScript Frameworkleri
    • Unit test yazarken sadece "bize söylediler" diye değil, gerçekten gereksinim duyulduğunda yazılması gerektiği vurgulanıyor.
    • JavaScript dünyasında birçok farklı unit testing framework bulunuyor, ancak hepsi temel olarak Jasmine'in altyapısına dayanıyor.
    • React Native'de varsayılan olarak Jest kütüphanesi kullanılıyor, ancak React için React Testing Library öneriliyor.
    02:00Test Framework Seçimi ve Değişkenlik
    • Büyük kurumlar için test framework'lerinin hızlı değişmesi adaptasyon sürecini uzatıyor ve maliyetli hale getiriyor.
    • React Native'de henüz React Testing Library kullanılmıyor ancak kısa sürede bu geçiş yapılabilir.
    • Her framework'ün kendine özgü test yapısı olduğu için, framework değişimi genellikle %70'lik kod tekrar yazılması gerektiği gibi bir durum yaratıyor.
    05:46React Native App Oluşturma
    • Yeni bir React Native uygulaması oluşturuluyor ve "project" adı veriliyor.
    • React Native projelerinde Jest varsayılan olarak ekleniyor, bu nedenle ek ayarlamalar gerekmiyor.
    • Mevcut projelere Jest eklemek isteyenler için resmi site kurulum adımlarını uygulamaları gerekiyor.
    08:00Unit Test Örneği
    • Bir "src" klasörü oluşturulup içinde "SomeClass" adında bir sınıf tanımlanıyor.
    • Sınıfın constructor'ı iki sayı alıyor ve topla fonksiyonu bu sayıların toplamını hesaplıyor.
    • Unit test teorisine göre her satırın çalıştığını doğrulamak ve kod覆盖率达到100%需要验证每个函数的执行情况。
    10:57Unit Test Prensipleri
    • Unit test yazarken, test edilen fonksiyon sadece kendi konteksten çıkması gerekir ve dış etkilerden bağımsız olmalıdır.
    • Bir fonksiyon dışarıya çağrı yapıyorsa (örneğin ağ isteği veya veritabanı işlemi), bunları simüle etmek gerekir.
    • Bir fonksiyonun testi sadece o fonksiyon içindeki işlemlerden oluşmalı, dışarıya yapılan çağrıları test etmek için farklı testler yazılmalıdır.
    12:19Code Coverage ve Unit Test
    • Code coverage, unit testlerin gerçek kodu ne kadar kapattığını gösterir ve satır, fonksiyon ve branch seviyesinde hesaplanır.
    • Istanbul plugin, npm ile kurulabilir ve code coverage hesaplaması yaparak test覆盖率百分比,未测试的行数等信息直接提供给用户。
    13:09单元测试和代码覆盖率的重要性
    • 代码覆盖率是指单元测试覆盖实际代码的程度,如果只测试了构造函数而忽略了其他部分,那么这些未测试的行就不会被覆盖。
    • 代码覆盖率可以设置阈值,例如在代码检入时,如果覆盖率低于70%,系统可以拒绝检入。
    • 单元测试应该从项目一开始就实施,如果一个项目已经存在了15年而没有单元测试,再尝试引入单元测试会非常困难。
    16:42Istanbul插件的工作原理
    • Istanbul插件通过NYC工具生成代码覆盖率报告,显示语句、分支、函数和行的覆盖率。
    • 该插件在代码的每个部分插入计数器,实际执行代码时记录这些计数器的值,从而计算出覆盖率。
    • 单元测试在隔离的环境中执行,通常在构建服务器上运行,与外部网络隔离。
    19:59单元测试的最佳实践
    • 单元测试应该在独立的容器中运行,与外部世界无关。
    • 对于网络调用、数据库调用、文件操作等,需要使用模拟(mocking)技术来替代实际调用。
    • 模拟不仅仅是返回假数据,还可以跟踪函数被调用的次数和参数(称为间谍技术)。
    22:09测试文件的组织结构
    • 测试文件可以放在单独的目录中,也可以与源代码文件放在同一个目录中。
    • Jest默认会在`__tests__`目录中查找以`.test.js`结尾的测试文件。
    • 推荐测试文件的目录结构与应用的目录结构相匹配,以便于查找每个文件的测试。
    24:41Jest Test Çerçevesi ve Temel Kavramlar
    • Jest test çerçevesinde "describe" blokları test suitlerinin ana grubu olarak kullanılır ve içinde "it" blokları (test iterasyon grupları) bulunur.
    • Testlerde anlamlı ve açıklayıcı isimler kullanmak önemlidir, örneğin "it" bloklarında "som class constructor fields a value" gibi ifadeler kullanılmalıdır.
    • Test başarısız olduğunda, hata mesajı okuyarak doğrudan sorunun kaynağını tespit etmek için anlamlı test isimleri kullanmak önemlidir.
    25:37Test Yazımı ve Çalıştırma
    • Test dosyalarında "import sum from" kullanarak test edilecek sınıfları içe aktarabilirsiniz.
    • Jest'te testler "expect" ifadesiyle yapılır ve "toEqual" gibi predifined expect fonksiyonları kullanılır.
    • Test başarısız olduğunda, hata mesajı okuyarak doğrudan sorunun kaynağını tespit edebilirsiniz.
    35:27Asenkron Testler ve Fake Timers
    • Unit testlerin dakikalar içinde bitmesi gerekir, ancak asenkron işlemler (örneğin settimeout) testleri başarısız hale getirebilir.
    • Jest'te "jest.useFakeTimers()" kullanarak zaman işlemlerini taklit edebilir ve "jest.runAllTimers()" ile tüm zamanlayıcıları senkron şekilde çalıştırabilirsiniz.
    • Testlerde "expect(setTimeout).toBeCalledTimes(1)" gibi ifadelerle, belirli bir fonksiyonun en az bir kez çağrıldığından emin olabilirsiniz.
    39:40JavaScript Test Çerçevesi ve Fonksiyon Testleri
    • JavaScript'te case sensitive olduğu hatırlatılıyor ve testlerde fonksiyonların nasıl çağrıldığının kontrolü yapılıyor.
    • setTimeout fonksiyonunun test edilirken iki parametre beklediği ve bunların birinci parametre olarak bir fonksiyon, ikinci parametre olarak bir sayı olması gerektiği belirtiliyor.
    • Testlerde fonksiyonların nasıl çağrıldığının, ne zaman çağrıldığının ve ne değerlerle çağrıldıklarının kontrolü yapılıyor.
    41:16Promise Fonksiyonlarının Test Edilmesi
    • Asenkron fonksiyonlar için promise kullanıldığı ve promise'lerin test edilmesi gerektiği vurgulanıyor.
    • Promise fonksiyonlarının test edilirken resolve ve reject değerlerinin kontrolü yapılması gerektiği gösteriliyor.
    • Testlerde promise'lerin beklenmesi için "return" kullanılması gerektiği ve bunun aksi halde testlerin zaman aşımına uğrayabileceği açıklanıyor.
    49:20Test Performansı ve Zaman Yönetimi
    • Büyük projelerde yüzbinlerce testin birkaç dakika içinde tamamlanması gerektiği ve zaman aşımının kaçırılan işlerden kaynaklanabileceği belirtiliyor.
    • Testlerde zaman yönetimi için fake timer kullanmanın öneminden bahsediliyor.
    • Kod yazımında bir birim maliyeti varken, unit test yazımında iki birim maliyet gerektiği ve bu faktörün projelerdeki unit test olamayışının sebeplerinden biri olabileceği vurgulanıyor.
    51:39Test Konseptleri ve Yapılandırma
    • Spy konsepti, bir fonksiyonun ne zaman, kaç kere ve kim tarafından çağrıldığını kontrol etme işlemi olarak tanımlanıyor.
    • Mock konsepti, fonksiyonların gerçek davranışlarını değiştirmek için kullanıldığı ve setTimemount gibi fonksiyonların fake değerlerle test edilmesi gerektiği belirtiliyor.
    • Testlerde beforeAll, afterAll, beforeEach ve afterEach gibi yapılandırma fonksiyonlarının kullanılmasıyla test kodlarının daha basitleştirilebileceği gösteriliyor.
    54:29Unit Testlerde Clean-Up ve Initialize İşlemleri
    • Kodda bazı satırlar uçurulabilir ve bazı değişiklikler yapılabilir.
    • Unit testlerde her iterasyonda yeni bir instance oluşturulmalı, böylece her test kendi temiz ortamında başlasın.
    • Farklı testler arasında verilerin birbirini etkilememesi için her iterasyonda kullanılan dataların sıfırdan hazırlanması gerekir.
    56:34Testlerin Bağımsızlığı ve Temizliği
    • Her test kendi içerisinde tutarlı olmalı, bir testin başarısız olması diğer testleri etkilememeli.
    • Problemleri tespit etmek için her test için sıfırdan yaratılmış konteks, aksiyonlar ve test kontrolü gereklidir.
    • Testlerde before all, after all, before each ve after each gibi metodlar kullanılarak değişkenlerin işi bittiğinde temizlenmesi sağlanmalıdır.
    57:13Unit Testlerde Veritabanı ve Backend Simülasyonu
    • Unit testlerde veritabanı simüle edilmelidir, çünkü gerçek bir veritabanı yoktur.
    • Tablolar ve içindeki datalar simüle edilerek select sorgularının return değerleri sağlanmalıdır.
    • Backendli uygulamalar için backend cevabının fake olarak çalıştırılması gerekir, ancak backend'in kendisi veritabanını kullanır.

    Yanıtı değerlendir

  • Yazeka sinir ağı makaleleri veya videoları özetliyor