Unit testing 在TypeScript中模拟拖动事件的数据传输

Unit testing 在TypeScript中模拟拖动事件的数据传输,unit-testing,typescript,drag-and-drop,Unit Testing,Typescript,Drag And Drop,我正在为依赖于事件的数据传输的拖放交互编写单元测试。我也在使用打字脚本。为了模拟事件,我编写了以下小函数: function createDragEvent(eventName: string, dataTransferData?: Array<any>) { const event = new CustomEvent(eventName, { bubbles: true, cancelable: true }); event.dataTransfer = {

我正在为依赖于事件的
数据传输的拖放交互编写单元测试。我也在使用打字脚本。为了模拟事件,我编写了以下小函数:

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;
}
函数createDrageEvent(eventName:string,dataTransferData?:数组){
const event=new CustomEvent(eventName,{bubbles:true,cancelable:true});
event.dataTransfer={
setData:jasmine.createSpy(“setData()spy”),
getData:jasmine.createSpy(“getData()spy”)和.callFake(function()){
返回dataTransferData[0]=“text/plain”?dataTransferData[1]:未定义;
})
};
返回事件;
}
然而,TypeScript告诉我

TS2339:类型“CustomEvent”上不存在属性“dataTransfer”


我不能使用
dataTransfer
,也不能使用native
DragEvent
s,因为我无法设置数据或监视其功能。是否有办法处理此问题,例如告诉TypeScript数据传输正常,或禁用此文件或类似文件的错误?

您可以这样做吗

const event: CustomEvent & { dataTransfer?: DataTransfer } =
    new CustomEvent(eventName, { bubbles: true, cancelable: true });

如果有人像我一样来到这里,因为TypeScript中的
事件
对象没有
数据传输
属性:


只需使用
DragEvent

如果您像我一样,因为您的函数需要
DragEvent
而无法使用
CustomEvent
解决方案,则以下操作对我有效:

    const dragEvent = new DragEvent('test')
    const mockEvent = {
        ...dragEvent,
        dataTransfer: new DataTransfer()
    } as DragEvent

对非常感谢。最后我不得不做
CustomEvent&{dataTransfer?:any}
但是你的方法奏效了!不幸的是,当我尝试访问
DragEvent
时,我遇到了一个
未定义的
错误。使用@libertyernie的答案,我至少能够创建一个符合我目的的事件参数。我还能够使用
sinon JS
来存根
jsdom
提供的
DrageEvent接口。e、 g.
const fakeEvent=sinon.stubInterface()