在Angular 7中解决Jasmine单元测试中的Hammer.js依赖问题,可以采取以下步骤:
在项目的根目录下,创建一个mocks文件夹,并在其中创建一个hammer.mock.ts文件。这将用于模拟Hammer.js的依赖。
在hammer.mock.ts文件中添加以下代码:
export class HammerMock {
on(eventName: string, callback: Function) {}
off(eventName: string, callback: Function) {}
destroy() {}
}
export class HammerInstance {
recognize() {}
}
export class HammerStatic {
constructor(element: HTMLElement | string, options?: any) {}
on(eventName: string, callback: Function) {}
off(eventName: string, callback: Function) {}
set(options: any) {}
get(options: any) {}
emit(eventName: string, eventData: any) {}
destroy() {}
}
export const Hammer = {
Instance: HammerInstance,
Static: HammerStatic,
mock: HammerMock
};
import { HammerGestureConfig, HAMMER_GESTURE_CONFIG } from '@angular/platform-browser';
import * as Hammer from 'hammerjs';
export class CustomHammerConfig extends HammerGestureConfig {
buildHammer(element: HTMLElement) {
const mc = new Hammer(element);
// 执行相关操作
return mc;
}
}
@NgModule({
providers: [
{
provide: HAMMER_GESTURE_CONFIG,
useClass: CustomHammerConfig
}
]
})
export class AppModule {}
你需要将import * as Hammer from 'hammerjs';
更改为import { Hammer } from '../mocks/hammer.mock';
。
import { Hammer } from '../mocks/hammer.mock';
beforeEach(() => {
spyOn(Hammer, 'Instance').and.returnValue({
on: (eventName: string, callback: Function) => {},
off: (eventName: string, callback: Function) => {},
recognize: () => {},
destroy: () => {}
});
spyOn(Hammer, 'Static').and.returnValue({
on: (eventName: string, callback: Function) => {},
off: (eventName: string, callback: Function) => {},
set: (options: any) => {},
get: (options: any) => {},
emit: (eventName: string, eventData: any) => {},
destroy: () => {}
});
spyOn(Hammer, 'mock').and.returnValue({
on: (eventName: string, callback: Function) => {},
off: (eventName: string, callback: Function) => {},
destroy: () => {}
});
});
这将模拟Hammer.js中的相关方法,并将它们的实现更改为空函数。
现在,你就可以在Angular 7中解决Jasmine单元测试中的Hammer.js依赖问题了。