logo
eng-flag

Jest Notları ve İpuçları

İçindekiler

  1. Giriş
  2. Kurulum
  3. Temel Test Yapısı
  4. Matcher'lar
  5. Asenkron Testler
  6. Mocking
  7. Kurulum ve Temizlik
  8. Testleri Gruplama
  9. Snapshot Testleri
  10. Kapsama Raporları
  11. En İyi Uygulamalar

Giriş

Jest, basitliğe odaklanan keyifli bir JavaScript Test Çerçevesidir. Babel, TypeScript, Node, React, Angular, Vue ve daha fazlasını kullanan projelerle çalışır!

Kurulum

Jest'i kurmak için şu komutu çalıştırın:

npm install --save-dev jest

package.json dosyanıza şu kısmı ekleyin:

{
  "scripts": {
    "test": "jest"
  }
}

Temel Test Yapısı

Jest'te temel bir test şu şekilde görünür:

test('testin açıklaması', () => {
  // Test kodunuzu buraya yazın
  expect(someValue).toBe(expectedValue);
});

Ayrıca test yerine it de kullanabilirsiniz:

it('bir şey yapmalıdır', () => {
  // Test kodunuzu buraya yazın
});

Matcher'lar

Jest, değerleri farklı şekillerde test etmek için "matcher"lar kullanır. İşte bazı yaygın matcher'lar:

Tam Eşitlik

expect(2 + 2).toBe(4);

Nesne Eşleşmesi

expect({name: 'John', age: 30}).toEqual({name: 'John', age: 30});

Doğruluk

expect(null).toBeNull();
expect(undefined).toBeUndefined();
expect(true).toBeTruthy();
expect(false).toBeFalsy();

Sayılar

expect(value).toBeGreaterThan(3);
expect(value).toBeGreaterThanOrEqual(3.5);
expect(value).toBeLessThan(5);
expect(value).toBeLessThanOrEqual(4.5);

Strings

expect('team').not.toMatch(/I/);
expect('Christoph').toMatch(/stop/);

Diziler ve Iterables

expect(['Apple', 'Banana', 'Orange']).toContain('Banana');

İstisnalar

expect(() => {
  throw new Error('Yanlış JDK kullanıyorsunuz');
}).toThrow();

expect(() => {
  throw new Error('Yanlış JDK kullanıyorsunuz');
}).toThrow('Yanlış JDK kullanıyorsunuz');

expect(() => {
  throw new Error('Yanlış JDK kullanıyorsunuz');
}).toThrow(/JDK/);

Asenkron Testler

Promisler

test('veri peanut butter', () => {
  return fetchData().then(data => {
    expect(data).toBe('peanut butter');
  });
});

Async/Await

test('veri peanut butter', async () => {
  const data = await fetchData();
  expect(data).toBe('peanut butter');
});

Callback'ler

test('veri peanut butter', done => {
  function callback(data) {
    try {
      expect(data).toBe('peanut butter');
      done();
    } catch (error) {
      done(error);
    }
  }

  fetchData(callback);
});

Mocking

Mock Fonksiyonlar

test('bir fonksiyonun mock implementasyonu', () => {
  const mock = jest.fn(() => 'bar');

  expect(mock('foo')).toBe('bar');
  expect(mock).toHaveBeenCalledWith('foo');
});

Mock Modüller

jest.mock('./myModule');

const myModule = require('./myModule');

test('bir şey yapmalıdır', () => {
  myModule.someFunction.mockReturnValue('mocked value');
  expect(myModule.someFunction()).toBe('mocked value');
});

Mock Zamanlayıcılar

jest.useFakeTimers();

test('oyunun bitmesi 1 saniye bekler', () => {
  const timerGame = require('../timerGame');
  timerGame();

  expect(setTimeout).toHaveBeenCalledTimes(1);
  expect(setTimeout).toHaveBeenLastCalledWith(expect.any(Function), 1000);
});

Kurulum ve Temizlik

beforeAll(() => {
  // Tüm testlerden önce çalışır
});

afterAll(() => {
  // Tüm testlerden sonra çalışır
});

beforeEach(() => {
  // Her testten önce çalışır
});

afterEach(() => {
  // Her testten sonra çalışır
});

Testleri Gruplama

describe('şehirleri yiyeceklerle eşleştirme', () => {
  test('Viyana <3 sosis', () => {
    expect(isValidCityFoodPair('Viyana', 'Wiener Schnitzel')).toBe(true);
  });

  test('San Juan <3 plantain', () => {
    expect(isValidCityFoodPair('San Juan', 'Mofongo')).toBe(true);
  });
});

Snapshot Testleri

it('doğru şekilde render eder', () => {
  const tree = renderer
    .create(<Link page="http://www.facebook.com">Facebook</Link>)
    .toJSON();
  expect(tree).toMatchSnapshot();
});

Kapsama Raporları

package.json dosyanıza şu kısmı ekleyin:

{
  "jest": {
    "collectCoverage": true,
    "coverageReporters": ["json", "lcov", "text", "clover"]
  }
}

Veya Jest'i çalıştırırken --coverage bayrağını kullanın.

En İyi Uygulamalar

  1. Test Açıklaması: Açık ve açıklayıcı test isimleri yazın.
  2. Arrange-Act-Assert: Testlerinizi AAA modelini kullanarak yapılandırın.
  3. Implementasyon Detaylarını Test Etmeyin: Modüllerinizin genel API'sini test etmeye odaklanın.
  4. Tekrarı Önleyin: Setup ve teardown kodlarını tekrar etmemek için beforeEach ve afterEach kullanın.
  5. Dış Bağımlılıkları Mock'layın: Test ettiğiniz kodu izole etmek için mocking kullanın.
  6. Testleri Basit Tutun: Her test belirli bir davranışı doğrulamalıdır.
  7. Testleri İzole Edin: Testler birbirine bağımlı olmamalıdır.
  8. Debugging İçin test.only Kullanın: Hata ayıklarken yalnızca bir testi çalıştırmak için test.only kullanın.
  9. Snapshot'ları Dikkatli Güncelleyin: Snapshot değişikliklerini güncellemeden önce her zaman gözden geçirin.
  10. Sürekli Entegrasyon: Testlerinizi CI/CD pipeline'ınızın bir parçası olarak çalıştırın.

2024 © Tüm hakları saklıdır - buraxta.com