logo
eng-flag

Jest Notları ve İpuçları

İçindekiler

  1. Giriş
  2. Kurulum
  3. Temel Test Yapısı
  4. Matchers
  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 aşağıdaki komutu çalıştırın:

npm install --save-dev jest

package.json dosyanıza aşağıdaki bölümü ekleyin:

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

Temel Test Yapısı

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

test('testin açıklaması', () => {
  // Test kodunuz burada
  expect(someValue).toBe(expectedValue);
});

Ayrıca test yerine it kullanabilirsiniz:

it('şunu yapmalı', () => {
  // Test kodunuz burada
});

Matchers

Jest, değerleri çeşitli şekillerde test etmenizi sağlayan "matchers" kullanır. İşte bazı yaygın matchers:

Tam Eşitlik

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

Nesne Eşleşmesi

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

Gerçeklik

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 Yineleyiciler

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

Promises

test('veri fıstık ezmesi', () => {
  return fetchData().then(data => {
    expect(data).toBe('fıstık ezmesi');
  });
});

Async/Await

test('veri fıstık ezmesi', async () => {
  const data = await fetchData();
  expect(data).toBe('fıstık ezmesi');
});

Geri Aramalar (Callbacks)

test('veri fıstık ezmesi', done => {
  function callback(data) {
    try {
      expect(data).toBe('fıstık ezmesi');
      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('şunu yapmalı', () => {
  myModule.someFunction.mockReturnValue('mocked value');
  expect(myModule.someFunction()).toBe('mocked value');
});

Mock Zamanlayıcılar

jest.useFakeTimers();

test('oyun bitmeden önce 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 yemeklerle 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 edilir', () => {
  const tree = renderer
    .create(<Link page="http://www.facebook.com">Facebook</Link>)
    .toJSON();
  expect(tree).toMatchSnapshot();
});

Kapsama Raporları

package.json dosyanıza aşağıdaki bölümü ekleyin:

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

Veya Jest ç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 modeline göre yapılandırın.

  3. Uygulama Detaylarını Test Etmeyin: Modüllerinizin kamu API'lerini test etmeye odaklanın.

  4. Tekrarı Önleyin: Kurulum ve temizlik kodunu tekrar etmemek için beforeEach ve afterEach kullanın.

  5. Dış Bağımlılıkları Mock Edin: 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ı Dikkatle Güncelleyin: Snapshot değişikliklerini güncellemeden önce her zaman gözden geçirin.

  10. Sürekli Entegrasyon: Testlerinizi CI/CD sürecinizin bir parçası olarak çalıştırın.

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