Eşleştiricileri Genişletme
Vitest, hem Chai hem de Jest ile uyumlu olduğundan, tercih ettiğiniz yaklaşıma göre chai.use API'sini veya expect.extend'i kullanabilirsiniz.
Bu kılavuz, eşleştiricileri expect.extend ile genişletmeyi açıklayacaktır. Chai'nin API'siyle ilgileniyorsanız, kılavuzlarına göz atabilirsiniz.
Varsayılan eşleştiricileri genişletmek için, eşleştiricilerinizi içeren bir nesne ile expect.extend'i çağırın.
expect.extend({
toBeFoo(received, expected) {
const { isNot } = this;
return {
// "pass" değerini isNot'a göre değiştirmeyin. Vitest bunu sizin için halleder.
pass: received === 'foo',
message: () => `${received} ${isNot ? 'foo değil' : 'foo'}`,
};
},
});TypeScript kullanıyorsanız, Vitest 0.31.0 ve üzeri sürümlerde, aşağıdaki kodla bir ortam bildirim dosyası içinde (örneğin: vitest.d.ts) varsayılan Assertion arayüzünü genişletebilirsiniz:
import type { Assertion, AsymmetricMatchersContaining } from 'vitest';
interface CustomMatchers<R = unknown> {
toBeFoo(): R;
}
declare module 'vitest' {
interface Assertion<T = any> extends CustomMatchers<T> {}
interface AsymmetricMatchersContaining extends CustomMatchers {}
}WARNING
Ortam bildirim dosyasını tsconfig.json dosyanıza eklemeyi unutmayın.
Bir eşleştiricinin dönüş değeri aşağıdaki arayüzle uyumlu olmalıdır:
interface MatcherResult {
pass: boolean;
message: () => string;
// Eğer bunları sağlarsanız, eşleştirici başarısız olduğunda otomatik olarak bir fark (diff) içinde görünürler,
// bu nedenle farkı kendiniz yazdırmanıza gerek kalmaz.
actual?: unknown;
expected?: unknown;
}WARNING
Asenkron bir eşleştirici oluşturursanız, testin kendisinde sonucu await etmeyi unutmayın (await expect('foo').toBeFoo()).
Bir eşleştirici fonksiyonu içindeki ilk argüman, alınan değerdir (expect(received) içindeki). Geri kalan argümanlar doğrudan eşleştiriciye iletilir.
Eşleştirici fonksiyonu, aşağıdaki özelliklere sahip this bağlamına erişim sağlar:
isNotEşleştirici
notüzerinde çağrıldıysatruedeğerini döndürür (expect(received).not.toBeFoo()).promiseEşleştirici
resolvedveyarejectedüzerinde çağrıldıysa, bu değer ilgili değiştiricinin adını içerir. Aksi takdirde, boş bir dize olacaktır.equalsBu, iki değeri karşılaştırmanıza olanak tanıyan bir yardımcı fonksiyondur. Değerler eşitse
true, aksi takdirdefalsedeğerini döndürür. Bu fonksiyon, hemen hemen her eşleştirici için dahili olarak kullanılır. Varsayılan olarak asimetrik eşleştiricilere sahip nesneleri destekler.utilsBu, mesajları biçimlendirmek için kullanabileceğiniz bir dizi yardımcı fonksiyon içerir.
this nesnesi ayrıca mevcut test hakkında bilgi içerir. expect.getState()'i çağırarak da alabilirsiniz. En kullanışlı özellikler şunlardır:
currentTestNameMevcut testin tam adı (describe bloğu dahil).
testPathMevcut testin dosya yolu.