Skip to content
Vitest 3
Main Navigation Kılavuz & APIYapılandırmaTarayıcı ModuGelişmiş API
3.2.0
2.1.9
1.6.1
0.34.6

Türkçe

English
简体中文
繁體中文
Español
Français
Русский
Português – Brasil
Deutsch
日本語
한국어
Italiano
Polski
čeština
magyar

Türkçe

English
简体中文
繁體中文
Español
Français
Русский
Português – Brasil
Deutsch
日本語
한국어
Italiano
Polski
čeština
magyar

Görünüm

Sidebar Navigation

Giriş

Neden Vitest

Başlarken

Özellikler

Vitest'i Yapılandırma

API

Test API Referansları

Mock Fonksiyonlar

Vi

expect

expectTypeOf

assert

assertType

Kılavuz

Komut Satırı Arayüzü

Test Filtreleme

Test Projeleri

Raporlayıcılar

Kapsam

Anlık Görüntüler

Mocking

Paralellik

Tür Testleri

Vitest UI

Kaynak İçi Test

Test Ortamı

Test Açıklamaları

Test Ortamı

Eşleştiricileri Genişletme

IDE Entegrasyonları

Hata Ayıklama

Sık Karşılaşılan Hatalar

Geçiş Kılavuzu

Vitest 3.0'a Geçiş

Jest'ten Geçiş

Performans

Test Performansını Profillendirme

Performansı İyileştirme

Tarayıcı Modu

Gelişmiş API

Diğer Test Çalıştırıcılarla Karşılaştırmalar

Bu sayfada

Anlık Görüntüler ​

Vue School'dan video yoluyla Anlık Görüntüleri öğrenin

Anlık görüntü testleri, fonksiyonlarınızın çıktısının beklenmedik bir şekilde değişmediğinden emin olmak istediğinizde oldukça kullanışlı bir araçtır.

Bir anlık görüntü kullanıldığında, Vitest verilen değerin bir anlık görüntüsünü alır ve ardından bunu testin yanında depolanan bir referans anlık görüntü dosyasıyla karşılaştırır. İki anlık görüntü eşleşmezse test başarısız olur: ya değişiklik beklenmediktir ya da referans anlık görüntünün sonucun yeni sürümüne göre güncellenmesi gerekmektedir.

Anlık Görüntüleri Kullanma ​

Bir değeri anlık görüntülemek için expect() API'sinden toMatchSnapshot() kullanabilirsiniz:

ts
import { expect, it } from 'vitest';

it('toUpperCase', () => {
  const result = toUpperCase('foobar');
  expect(result).toMatchSnapshot();
});

Bu test ilk kez çalıştırıldığında, Vitest şöyle görünen bir anlık görüntü dosyası oluşturur:

js
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html

exports['toUpperCase 1'] = '"FOOBAR"';

Anlık görüntü dosyası, kod değişiklikleriyle birlikte commit edilmeli ve kod inceleme sürecinizin bir parçası olarak gözden geçirilmelidir. Sonraki test çalıştırmalarında, Vitest oluşturulan çıktıyı önceki anlık görüntüyle karşılaştıracaktır. Eşleşirlerse test geçer. Eşleşmezlerse, ya test çalıştırıcısı kodunuzda düzeltilmesi gereken bir hata bulmuştur ya da uygulama değişmiştir ve anlık görüntünün güncellenmesi gerekmektedir.

WARNING

Eşzamansız testlerle Anlık Görüntüler kullanırken, doğru testin algılandığından emin olmak için yerel Test Bağlamı'ndan expect kullanılmalıdır.

Satır İçi Anlık Görüntüler ​

Benzer şekilde, anlık görüntüyü test dosyası içinde satır içi olarak depolamak için toMatchInlineSnapshot() kullanabilirsiniz.

ts
import { expect, it } from 'vitest';

it('toUpperCase', () => {
  const result = toUpperCase('foobar');
  expect(result).toMatchInlineSnapshot();
});

Bir anlık görüntü dosyası oluşturmak yerine, Vitest anlık görüntüyü bir dize olarak güncellemek için test dosyasını doğrudan değiştirecektir:

ts
import { expect, it } from 'vitest';

it('toUpperCase', () => {
  const result = toUpperCase('foobar');
  expect(result).toMatchInlineSnapshot('"FOOBAR"');
});

Bu, beklenen çıktıyı farklı dosyalar arasında geçiş yapmadan doğrudan görmenizi sağlar.

WARNING

Eşzamansız testlerle Anlık Görüntüler kullanırken, doğru testin algılandığından emin olmak için yerel Test Bağlamı'ndan expect kullanılmalıdır.

Anlık Görüntüleri Güncelleme ​

Alınan değer anlık görüntüyle eşleşmediğinde, test başarısız olur ve aralarındaki farkı gösterir. Anlık görüntü değişikliği bekleniyorsa, anlık görüntüyü mevcut duruma göre güncellemek isteyebilirsiniz.

İzleme modunda, başarısız olan anlık görüntüyü doğrudan güncellemek için terminalde u tuşuna basabilirsiniz.

Veya Vitest'in anlık görüntüleri güncellemesini sağlamak için CLI'da --update veya -u bayrağını kullanabilirsiniz.

bash
vitest -u

Dosya Anlık Görüntüleri ​

toMatchSnapshot() çağrıldığında, tüm anlık görüntüleri biçimlendirilmiş bir anlık görüntü dosyasına kaydederiz. Bu, anlık görüntü dizesindeki bazı karakterleri (yani çift tırnak " ve ters tırnak `) escape etmemiz gerektiği anlamına gelir. Bu durum, anlık görüntü içeriği için sözdizimi vurgulamasını kaybetmenize neden olabilir (eğer belirli bir dilde yazılmışlarsa).

Bu nedenle, bir dosyayla açıkça eşleşmek için toMatchFileSnapshot() özelliğini tanıttık. Bu, anlık görüntü dosyasına herhangi bir dosya uzantısı atamanıza olanak tanır ve okunabilirliği artırır.

ts
import { expect, it } from 'vitest';

it('render basic', async () => {
  const result = renderHTML(h('div', { class: 'foo' }));
  await expect(result).toMatchFileSnapshot('./test/basic.output.html');
});

Bu, ./test/basic.output.html içeriğiyle karşılaştırılacaktır. Ve --update bayrağıyla geri yazılabilir.

Resim Anlık Görüntüleri ​

jest-image-snapshot kullanarak resimleri anlık görüntülemek de mümkündür.

bash
npm i -D jest-image-snapshot
ts
test('image snapshot', () => {
  expect(readFileSync('./test/stubs/input-image.png')).toMatchImageSnapshot();
});

Özel Serileştirici ​

Anlık görüntülerinizin nasıl serileştirileceğini değiştirmek için kendi serileştirme mantığınızı ekleyebilirsiniz. Jest gibi, Vitest'in de yerleşik JavaScript türleri, HTML öğeleri, ImmutableJS ve React öğeleri için varsayılan serileştiricileri vardır.

expect.addSnapshotSerializer API'sini kullanarak açıkça özel serileştirici ekleyebilirsiniz.

ts
expect.addSnapshotSerializer({
  serialize(val, config, indentation, depth, refs, printer) {
    // `printer`, mevcut eklentileri kullanarak bir değeri serileştiren bir fonksiyondur.
    return `Pretty foo: ${printer(val.foo, config, indentation, depth, refs)}`;
  },
  test(val) {
    return val && Object.prototype.hasOwnProperty.call(val, 'foo');
  },
});

Ayrıca, özel serileştiricileri örtük olarak eklemek için snapshotSerializers seçeneğini de destekliyoruz.

ts
import { SnapshotSerializer } from 'vitest';

export default {
  serialize(val, config, indentation, depth, refs, printer) {
    // `printer`, mevcut eklentileri kullanarak bir değeri serileştiren bir fonksiyondur.
    return `Pretty foo: ${printer(val.foo, config, indentation, depth, refs)}`;
  },
  test(val) {
    return val && Object.prototype.hasOwnProperty.call(val, 'foo');
  },
} satisfies SnapshotSerializer;
ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    snapshotSerializers: ['path/to/custom-serializer.ts'],
  },
});

Aşağıdaki gibi bir test eklediğinizde:

ts
test('foo snapshot test', () => {
  const bar = {
    foo: {
      x: 1,
      y: 2,
    },
  };

  expect(bar).toMatchSnapshot();
});

Aşağıdaki anlık görüntüyü alacaksınız:

Pretty foo: Object {
  "x": 1,
  "y": 2,
}

Anlık görüntüleri serileştirmek için Jest'in pretty-format'ını kullanıyoruz. Daha fazla bilgi için buraya bakabilirsiniz: pretty-format.

Jest'ten Farklılıkları ​

Vitest, Jest'in Snapshot özelliğiyle neredeyse uyumlu bir özellik sunar, birkaç istisna dışında:

1. Anlık görüntü dosyasındaki yorum başlığı farklıdır {#_1-comment-header-in-the-snapshot-file-is-different} ​

diff
- // Jest Snapshot v1, https://goo.gl/fbAQLP
+ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html

Bu, işlevselliği gerçekten etkilemez ancak Jest'ten geçiş yaparken commit diff'inizi etkileyebilir.

2. printBasicPrototype varsayılan olarak false'tur {#_2-printbasicprototype-is-default-to-false} ​

Hem Jest hem de Vitest'in anlık görüntüleri pretty-format tarafından desteklenmektedir. Vitest'te daha temiz anlık görüntü çıktıları için printBasicPrototype varsayılan olarak false olarak ayarlanmıştır; Jest'in 29.0.0 sürümünden önceki versiyonlarında ise varsayılan olarak true'dur.

ts
import { expect, test } from 'vitest';

test('snapshot', () => {
  const bar = [
    {
      foo: 'bar',
    },
  ];

  // Jest'te
  expect(bar).toMatchInlineSnapshot(`
    Array [
      Object {
        "foo": "bar",
      },
    ]
  `);

  // Vitest'te
  expect(bar).toMatchInlineSnapshot(`
    [
      {
        "foo": "bar",
      },
    ]
  `);
});

Bunun okunabilirlik ve genel geliştirici deneyimi için daha makul bir varsayılan olduğuna inanıyoruz. Hala Jest'in davranışını tercih ediyorsanız, yapılandırmanızı değiştirebilirsiniz:

ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    snapshotFormat: {
      printBasicPrototype: true,
    },
  },
});

3. Özel mesajlar için ayırıcı olarak iki nokta üst üste : yerine büyüktür işareti > kullanılır {#_3-chevron-is-used-as-a-separator-instead-of-colon-for-custom-messages} ​

Vitest, bir anlık görüntü dosyası oluşturulurken özel bir mesaj iletildiğinde okunabilirlik için iki nokta üst üste : yerine büyüktür işareti > kullanır.

Aşağıdaki örnek test kodu için:

js
test('toThrowErrorMatchingSnapshot', () => {
  expect(() => {
    throw new Error('error');
  }).toThrowErrorMatchingSnapshot('hint');
});

Jest'te anlık görüntü şöyledir:

console
exports[`toThrowErrorMatchingSnapshot: hint 1`] = `"error"`;

Vitest'te eşdeğer anlık görüntü şöyle olacaktır:

console
exports[`toThrowErrorMatchingSnapshot > hint 1`] = `[Error: error]`;

4. toThrowErrorMatchingSnapshot ve toThrowErrorMatchingInlineSnapshot için varsayılan Error anlık görüntüsü farklıdır {#_4-default-error-snapshot-is-different-for-tothrowerrormatchingsnapshot-and-tothrowerrormatchinginlinesnapshot} ​

js
import { expect, test } from 'vitest'

test('snapshot', () => {
  // Jest ve Vitest'te
  expect(new Error('error')).toMatchInlineSnapshot(`[Error: error]`)

  // Jest, `Error` örneği için `Error.message`'ı anlık görüntüler
  // Vitest, toMatchInlineSnapshot ile aynı değeri yazdırır
  expect(() => {
    throw new Error('error')
  }).toThrowErrorMatchingInlineSnapshot(`"error"`) 
  }).toThrowErrorMatchingInlineSnapshot(`[Error: error]`) 
})
Pager
Önceki sayfaKapsam
Sonraki sayfaMocking

MIT Lisansı altında yayınlanmıştır.

Copyright (c) 2021-Present Vitest Team

https://vitest.dev/guide/snapshot

MIT Lisansı altında yayınlanmıştır.

Copyright (c) 2021-Present Vitest Team