Angular uygulamanızı test etmek, beklediğiniz gibi çalışıp çalışmadığını kontrol etmenize yardımcı olur. Birim testleri, hataları erken yakalamak, kod kalitesini sağlamak ve güvenli yeniden düzenlemeyi kolaylaştırmak için kritik öneme sahiptir.
NOTE: Bu kılavuz, Vitest kullanan yeni Angular CLI projeleri için varsayılan test kurulumunu kapsar. Mevcut bir projeyi Karma'dan taşıyorsanız, Karma'dan Vitest'e Geçiş kılavuzuna bakın. Karma hâlâ desteklenmektedir; daha fazla bilgi için Karma test kılavuzuna bakın.
Test için kurulum
Angular CLI, bir Angular uygulamasını Vitest test çerçevesi ile test etmek için ihtiyaç duyduğunuz her şeyi indirir ve yükler. Yeni projeler varsayılan olarak vitest ve jsdom içerir.
Vitest, birim testlerinizi bir Node.js ortamında çalıştırır. Tarayıcının DOM'unu simüle etmek için Vitest, jsdom adlı bir kütüphane kullanır. Bu, tarayıcı başlatma yükünü ortadan kaldırarak daha hızlı test yürütülmesini sağlar. jsdom yerine happy-dom gibi bir alternatifi yükleyip jsdom'u kaldırarak değiştirebilirsiniz. Şu anda jsdom ve happy-dom desteklenen DOM emülasyon kütüphaneleridir.
CLI ile oluşturduğunuz proje hemen teste hazırdır. ng test komutunu çalıştırın:
ng test
ng test komutu uygulamayı izleme modunda derler ve Vitest test çalıştırıcısını başlatır.
Konsol çıktısı şu şekilde görünür:
✓ src/app/app.spec.ts (3)
✓ AppComponent should create the app
✓ AppComponent should have as title 'my-app'
✓ AppComponent should render title
Test Files 1 passed (1)
Tests 3 passed (3)
Start at 18:18:01
Duration 2.46s (transform 615ms, setup 2ms, collect 2.21s, tests 5ms)
ng test komutu ayrıca dosyalarınızı değişiklikler için izler. Bir dosyayı değiştirip kaydederseniz, testler tekrar çalışır.
Yapılandırma
Angular CLI, Vitest yapılandırmasının çoğunu sizin için yönetir. angular.json dosyanızdaki test hedef seçeneklerini değiştirerek test davranışını özelleştirebilirsiniz.
Angular.json seçenekleri
include: Test için dahil edilecek dosyalar için glob kalıpları. Varsayılan olarak['**/*.spec.ts', '**/*.test.ts']değerindedir.exclude: Testten hariç tutulacak dosyalar için glob kalıpları.setupFiles: Testlerinizden önce çalıştırılan global kurulum dosyalarına (ör. polyfill'ler veya global mock'lar) giden yolların listesi.providersFile: Test ortamı için varsayılan bir Angular sağlayıcı dizisi dışa aktaran bir dosyanın yolu. Bu, testlerinize enjekte edilen global test sağlayıcılarını ayarlamak için kullanışlıdır.coverage: Kod kapsam raporlamasını etkinleştirmek veya devre dışı bırakmak için bir boolean değer. Varsayılan olarakfalsedeğerindedir.browsers: Testleri gerçek bir tarayıcıda çalıştırmak için tarayıcı adları dizisi (ör.["chromium"]). Bir tarayıcı sağlayıcısının yüklenmesini gerektirir. Daha fazla ayrıntı için Testleri tarayıcıda çalıştırma bölümüne bakın.
Global test kurulumu ve provider'lar
setupFiles ve providersFile seçenekleri, global test yapılandırmasını yönetmek için özellikle kullanışlıdır.
Örneğin, tüm testlerinize provideHttpClientTesting sağlamak için bir src/test-providers.ts dosyası oluşturabilirsiniz:
src/test-providers.ts
import {EnvironmentProviders, Provider} from '@angular/core';
import {provideHttpClientTesting} from '@angular/common/http/testing';
const testProviders: (Provider | EnvironmentProviders)[] = [provideHttpClientTesting()];
export default testProviders;
Ardından bu dosyayı angular.json dosyanızda referans gösterirsiniz:
{
"projects": {
"your-project-name": {
"architect": {
"test": {
"builder": "@angular/build:unit-test",
"options": {
"providersFile": "src/test-providers.ts"
}
}
}
}
}
}
HELPFUL: Test kurulumu veya sağlayıcılar için src/test-providers.ts gibi yeni TypeScript dosyaları oluştururken, bunların projenizin test TypeScript yapılandırma dosyasına (genellikle tsconfig.spec.json) dahil edildiğinden emin olun. Bu, TypeScript derleyicisinin test sırasında bu dosyaları düzgün bir şekilde işlemesini sağlar.
Gelişmiş Vitest yapılandırması
İleri düzey kullanım durumları için, angular.json dosyasındaki configFile seçeneğini kullanarak özel bir Vitest yapılandırma dosyası sağlayabilirsiniz.
IMPORTANT: Özel bir yapılandırma kullanmak ileri düzey seçenekleri etkinleştirirken, Angular ekibi yapılandırma dosyasının içeriği veya herhangi bir üçüncü taraf eklentisi için destek sağlamaz. CLI ayrıca düzgün entegrasyon sağlamak için belirli özellikleri (test.projects, test.include) geçersiz kılacaktır.
Bir Vitest yapılandırma dosyası (ör. vitest-base.config.ts) oluşturabilir ve angular.json dosyanızda referans gösterebilirsiniz:
{
"projects": {
"your-project-name": {
"architect": {
"test": {
"builder": "@angular/build:unit-test",
"options": {
"runnerConfig": "vitest-base.config.ts"
}
}
}
}
}
}
CLI kullanarak bir temel yapılandırma dosyası da oluşturabilirsiniz:
ng generate config vitest
Bu, özelleştirebileceğiniz bir vitest-base.config.ts dosyası oluşturur.
HELPFUL: Vitest yapılandırması hakkında daha fazla bilgi için resmi Vitest belgelerini okuyun.
Kod coverage
ng test komutuna --coverage bayrağını ekleyerek bir kod kapsam raporu oluşturabilirsiniz. Rapor coverage/ dizininde oluşturulur.
Daha ayrıntılı bilgi için Kod kapsam kılavuzuna bakın.
Tarayıcıda test çalıştırma
Varsayılan Node.js ortamı çoğu birim testi için daha hızlı olsa da, testlerinizi gerçek bir tarayıcıda da çalıştırabilirsiniz. Bu, tarayıcıya özgü API'lere (örneğin render etme) dayanan testler veya hata ayıklama için kullanışlıdır.
Testleri bir tarayıcıda çalıştırmak için önce bir tarayıcı sağlayıcısı yüklemeniz gerekir. Vitest'in tarayıcı modu hakkında daha fazla bilgi için resmi belgeleri okuyun.
Sağlayıcı yüklendikten sonra, angular.json dosyasındaki browsers seçeneğini yapılandırarak veya --browsers CLI bayrağını kullanarak testlerinizi tarayıcıda çalıştırabilirsiniz. Testler varsayılan olarak görünür tarayıcıda çalışır. CI ortam değişkeni ayarlandıysa, bunun yerine başsız mod kullanılır. Başsız modu açıkça kontrol etmek için tarayıcı adının sonuna Headless ekleyebilirsiniz (ör. chromiumHeadless).
# Playwright örneği (görünür)
ng test --browsers=chromium
# Playwright örneği (başsız)
ng test --browsers=chromiumHeadless
# WebdriverIO örneği (görünür)
ng test --browsers=chrome
# WebdriverIO örneği (başsız)
ng test --browsers=chromeHeadless
İhtiyaçlarınıza göre aşağıdaki tarayıcı sağlayıcılarından birini seçin:
Playwright
Playwright, Chromium, Firefox ve WebKit'i destekleyen bir tarayıcı otomasyon kütüphanesidir.
WebdriverIO
WebdriverIO, Chrome, Firefox, Safari ve Edge'i destekleyen bir tarayıcı ve mobil otomasyon test çerçevesidir.
Preview
@vitest/browser-preview sağlayıcısı, StackBlitz gibi WebContainer ortamları için tasarlanmıştır ve CI/CD'de kullanılmak üzere tasarlanmamıştır.
HELPFUL: Daha gelişmiş tarayıcıya özgü yapılandırma için Gelişmiş Vitest yapılandırması bölümüne bakın.
Diğer test framework'leri
Bir Angular uygulamasını diğer test kütüphaneleri ve test çalıştırıcıları ile de birim test edebilirsiniz. Her kütüphane ve çalıştırıcının kendi kurulum prosedürleri, yapılandırması ve sözdizimi vardır.
Sürekli entegrasyonda test etme
Sağlam bir test paketi, sürekli entegrasyon (CI) hattının önemli bir parçasıdır. CI sunucuları, testlerinizi her commit ve pull request'te otomatik olarak çalıştırmanızı sağlar.
Angular uygulamanızı bir CI sunucusunda test etmek için standart test komutunu çalıştırın:
ng test
Çoğu CI sunucusu, ng test'in algıladığı bir CI=true ortam değişkeni ayarlar. Bu, testlerinizi otomatik olarak etkileşimsiz, tek çalıştırma modunda yapılandırır.
CI sunucunuz bu değişkeni ayarlamıyorsa veya tek çalıştırma modunu manuel olarak zorlamanız gerekiyorsa, --no-watch ve --no-progress bayraklarını kullanabilirsiniz:
ng test --no-watch --no-progress
Test hakkında daha fazla bilgi
Uygulamanızı test için kurduktan sonra, aşağıdaki test kılavuzlarını faydalı bulabilirsiniz.
| Ayrıntılar | |
|---|---|
| Code coverage | Testlerinizin uygulamanızın ne kadarını kapsadığı ve gerekli miktarları nasıl belirleyeceğiniz. |
| Testing services | Uygulamanızın kullandığı servisleri nasıl test edeceğiniz. |
| Basics of testing components | Angular bileşenlerini test etmenin temelleri. |
| Component testing scenarios | Çeşitli bileşen test senaryoları ve kullanım durumları. |
| Testing attribute directives | Nitelik yönergelerinizi nasıl test edeceğiniz. |
| Testing pipes | Pipe'ları nasıl test edeceğiniz. |
| Debugging tests | Yaygın test hataları. |
| Testing utility APIs | Angular test özellikleri. |