Eşleştiricileri Genişletme
Vitest hem Chai hem de Jest ile uyumlu olduğundan, tercih ettiğiniz 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 atın.
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ğerinizi isNot'a göre değiştirmeyin. Vitest bunu sizin için yapar
pass: received === 'foo',
message: () => `${received} is${isNot ? ' not' : ''} foo`,
};
},
});
TypeScript kullanıyorsanız, varsayılan Assertion
arayüzünü bir ortam bildirim dosyasında (örn: vitest.d.ts
) aşağıdaki kodla genişletebilirsiniz:
import 'vitest';
interface CustomMatchers<R = unknown> {
toBeFoo: () => R;
}
declare module 'vitest' {
interface Matchers<T = any> extends CustomMatchers<T> {}
}
import 'vitest';
interface CustomMatchers<R = unknown> {
toBeFoo: () => R;
}
declare module 'vitest' {
interface Assertion<T = any> extends CustomMatchers<T> {}
interface AsymmetricMatchersContaining extends CustomMatchers {}
}
TIP
Vitest 3.2'den itibaren, expect.extend
, expect().*
ve expect.*
yöntemlerinde aynı anda tür güvenli onaylamalara sahip olmak için Matchers
arayüzünü genişletebilirsiniz. Daha önce, her biri için ayrı arayüzler tanımlamanız gerekirdi.
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 ExpectationResult {
pass: boolean;
message: () => string;
// Bunları sağlarsanız, eşleştirici başarısız olduğunda otomatik olarak bir fark içinde görünecekler,
// bu nedenle farkı kendiniz yazdırmanıza gerek yoktur
actual?: unknown;
expected?: unknown;
}
WARNING
Asenkron bir eşleştirici oluşturursanız, testin kendisinde sonucu await
etmeyi unutmayın (await expect('foo').toBeFoo()
):
expect.extend({
async toBeAsyncAssertion() {
// ...
},
});
await expect().toBeAsyncAssertion();
Bir eşleştiricinin fonksiyonundaki ilk argüman alınan değerdir (expect(received)
içindeki). Diğerleri doğrudan eşleştiriciye iletilen argümanlardır.
Eşleştirici fonksiyonu, aşağıdaki özellikleri içeren this
bağlamına erişebilir:
isNot
Eşleştirici not
üzerinde çağrıldıysa (expect(received).not.toBeFoo()
) true
döndürür.
promise
Eşleştirici resolved
veya rejected
üzerinde çağrıldıysa, bu değer değiştiricinin adını içerecektir. 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 takdirde false
döndürür. Bu fonksiyon neredeyse her eşleştirici için dahili olarak kullanılır. Varsayılan olarak asimetrik eşleştiricilere sahip nesneleri destekler.
utils
Bu, mesajları görüntülemek için kullanabileceğiniz bir dizi yardımcı fonksiyon içerir.
this
bağlamı ayrıca mevcut test hakkında bilgi içerir. Bunu expect.getState()
çağırarak da alabilirsiniz. En kullanışlı özellikler şunlardır:
currentTestName
Mevcut testin tam adı (describe bloğu dahil).
testPath
Mevcut testin dosya yolu.