enhetstesting - Simuler dataTransfer for dra-hendelser i TypeScript
Jeg skriver enhetstester for en dra-og-slipp-interaksjon som er avhengig av dataTransfer til hendelsen. Jeg bruker også TypeScript. For å simulere hendelsen(e) skrev jeg denne lille funksjonen:
function createDragEvent(eventName: string, dataTransferData?: Array<any>) {
const event = new CustomEvent(eventName, { bubbles: true, cancelable: true });
event.dataTransfer = {
setData: jasmine.createSpy("setData() spy"),
getData: jasmine.createSpy("getData() spy").and.callFake(function() {
return dataTransferData[0] === 'text/plain' ? dataTransferData[1] : undefined;
})
};
return event;
}
Men TypeScript sier til meg
TS2339: Egenskapen 'dataTransfer' finnes ikke på typen 'CustomEvent'.
Jeg kan ikke ikke bruke dataTransfer, og jeg kan ikke bruke native DragEvent-hendelser fordi jeg ikke kan sette dataene eller overvåke funksjonene dens. Finnes det en måte å håndtere dette på, f.eks. fortelle TypeScript at dataTransfer er ok, eller deaktivere feilen for denne filen, eller noe sånt?
Svar #1
Hvis noen kommer hit som jeg gjorde fordi Event-objektet i TypeScript ikke har en dataTransfer-attributt:
Bare bruk DragEvent i stedet.
Svar #2
Kunne du gjort noe slik?
const event: CustomEvent & { dataTransfer?: DataTransfer } =
new CustomEvent(eventName, { bubbles: true, cancelable: true });
