typescript - Vitest περιμένω επεκτάσεις
Προσπαθώ να δημιουργήσω ένα expect.extend στο Vitest, προσπάθησα να ακολουθήσω τη τεκμηρίωση
Δημιούργησα ένα αρχείο vitest.d.ts όπου δηλώνω αυτό:
interface CustomMatchers<R = unknown> {
toPassGuard(guardFunc: (record: unknown) => boolean): boolean;
toPassGuardArray<T = unknown>(guardFunc: (record: T) => boolean): boolean;
}
declare module 'vitest' {
interface Assertion<T = any> extends CustomMatchers<T> {}
interface AsymmetricMatchersContaining extends CustomMatchers {}
}
Κι όμως, εξακολουθώ να λαμβάνω σφάλμα τύπου εδώ expect(arrOfSettings).toPassGuardArray(isSettings)
Property 'toPassGuardArray' does not exist on type 'Assertion<string| undefined>[], any>'
Βρήκα έναν τρόπο γύρω από το πρόβλημα όπου άλλαξα το Assertion σε JestAssertion (που είναι ένα υποπακέτο), και αυτό δουλεύει αλλά μόνο αν ο ορισμός του matcher είναι στο ίδιο αρχείο που το χρησιμοποιώ,
παράδειγμα :
expect.extend({
toPassGuardArray(received, guardFunc) {
const failedItems = received.filter((receiveItem) => !guardFunc(receiveItem))
const pass = failedItems.length === 0
return {
pass,
message: () => `${failedItems.length} did${!pass ? ' not' : ''} pass guard ${guardFunc.name}`,
actual: (`${failedItems.map((item) => item)} to pass guard`).substring(0, 300)
}
}
})
τώρα αυτό expect(allEnriched).toPassGuardArray<Asset>(guard) λειτουργεί μόνο αν το expect.extend βρίσκεται στο ίδιο αρχείο, διαφορετικά παίρνω
Error: Invalid Chai property: toPassGuardArray
Το Chai είναι επίσης ένα υποπακέτο, οπότε υποθέτω ότι υπάρχει μια σύγκρουση εδώ...
Απάντηση #1
Εντάξει, κατάλαβα, θα έπρεπε να είχα συμπεριλάβει όλες τις προσαρμοσμένες δηλώσεις σε ένα αρχείο εγκατάστασης και να το προσθέσω στη διαμόρφωση
export default defineConfig({
test: {
setupFiles: ['filesWhereIDeclare.js'],
},
});
