Erweiterung von Matchern
Da Vitest sowohl mit Chai als auch mit Jest kompatibel ist, können Sie entweder die chai.use-API oder expect.extend verwenden, je nachdem, welche Ihnen besser gefällt.
Dieser Leitfaden behandelt die Erweiterung von Matchern mit expect.extend. Wenn Sie sich für die API von Chai interessieren, lesen Sie deren Leitfaden.
Um Standard-Matcher zu erweitern, rufen Sie expect.extend mit einem Objekt auf, das Ihre Matcher enthält.
expect.extend({
toBeFoo(received, expected) {
const { isNot } = this;
return {
// Verändern Sie das Ergebnis ("pass") nicht basierend auf isNot. Vitest kümmert sich darum.
pass: received === 'foo',
message: () => `${received} ist${isNot ? ' nicht' : ''} foo`,
};
},
});Wenn Sie TypeScript verwenden, können Sie seit Vitest 0.31.0 die Standard-Assertion-Schnittstelle in einer Ambient Declaration-Datei (z. B.: vitest.d.ts) mit dem folgenden Code erweitern:
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
Vergessen Sie nicht, die Ambient Declaration-Datei in Ihre tsconfig.json aufzunehmen.
Der Rückgabewert eines Matchers sollte mit der folgenden Schnittstelle kompatibel sein:
interface MatcherResult {
pass: boolean;
message: () => string;
// Wenn Sie diese angeben, werden sie automatisch in einem Diff angezeigt, wenn
// der Matcher fehlschlägt, sodass Sie den Diff nicht selbst ausgeben müssen
actual?: unknown;
expected?: unknown;
}WARNING
Wenn Sie einen asynchronen Matcher erstellen, vergessen Sie nicht, im Test selbst await für das Ergebnis zu verwenden (await expect('foo').toBeFoo()).
Das erste Argument in der Funktion eines Matchers ist der empfangene Wert (der Wert innerhalb von expect(received)). Die weiteren Argumente sind Argumente, die direkt an den Matcher übergeben werden.
Matcher-Funktionen haben Zugriff auf this mit den folgenden Eigenschaften:
isNotGibt
truezurück, wenn der Matcher mit.notaufgerufen wurde (expect(received).not.toBeFoo()).promiseWenn der Matcher mit
.resolvedoder.rejectedaufgerufen wurde, enthält dieser Wert den Namen des Modifikators. Andernfalls ist es eine leere Zeichenkette.equalsDies ist eine Hilfsfunktion, mit der Sie zwei Werte vergleichen können. Sie gibt
truezurück, wenn die Werte gleich sind, andernfallsfalse. Diese Funktion wird intern für fast jeden Matcher verwendet und unterstützt standardmäßig Objekte mit asymmetrischen Matchern.utilsDies enthält eine Reihe von Hilfsfunktionen, die Sie zur Anzeige von Nachrichten verwenden können.
Der this-Kontext enthält auch Informationen über den aktuellen Test. Diese können auch durch Aufrufen von expect.getState() abgerufen werden. Die nützlichsten Eigenschaften sind:
currentTestNameVollständiger Name des aktuellen Tests (einschließlich
describe-Block).testPathPfad zum aktuellen Test.