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
,也不能使用nativeDragEvent
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()代码>