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:
isNot
Eşleştirici
not
üzerinde çağrıldıysatrue
değerini döndürür (expect(received).not.toBeFoo()
).promise
Eşleştirici
resolved
veyarejected
üzerinde çağrıldıysa, bu değer ilgili değiştiricinin adını içerir. Aksi takdirde, boş bir dize olacaktır.equals
Bu, iki değeri karşılaştırmanıza olanak tanıyan bir yardımcı fonksiyondur. Değerler eşitse
true
, aksi takdirdefalse
değ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.utils
Bu, 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:
currentTestName
Mevcut testin tam adı (describe bloğu dahil).
testPath
Mevcut testin dosya yolu.