angular - Hur man mockar ett gränssnitt med Jest utan att skapa en instans
Jag vet att vi kan göra det i Kotlin men jag hittade det inte med Jest. Jag har komplexa gränssnitt och en array av dessa gränssnitt och jag vill inte specificera alla värden på alla attribut av gränssnittet. Nedan gjorde jag ett exempel på vad jag skulle vilja:
interface User {
name: string
lastname: string
age: number
phone: string
password: string
friend: User[] | undefined
}
const user: User = mock()
user.age = 35
incrementAge(user)
expect(user.age).toBe(36)
Svar #1
Gränssnitt finns inte i JS:s körningstid, det är helt och hållet en TS-funktion som används för typkontroller under kompilering. Därför är det omöjligt att generera en korrekt mock baserat på ett gränssnitt i JS-körningstid. Däremot är det möjligt med klasser.
Med tanke på att du vill skapa en mock utan att skapa en instans, kan du kasta ett tomt objekt till önskad typ. Tänk dock på att det kastade objektet inte har några egenskaper som standard och att åtkomst till dem kommer att returnera undefined.
interface User {
name: string
lastname: string
age: number
phone: string
password: string
friend: User[] | undefined
}
const user = {} as User;
user.age = 35 // works
user.name = undefined; // fails, wrong type
