【发布时间】:2021-04-05 05:17:18
【问题描述】:
我想测试这段代码:
constructor(drawingService: DrawingService) {
super(drawingService);
//...
}
private writeOnCanvas(): void {
this.drawingService.clearCanvas(this.drawingService.previewCtx);
this.drawingService.baseCtx.fillStyle = 'red';
this.drawingService.baseCtx.font = 'arial 20px';
this.drawingService.baseCtx.textAlign = 'center';
this.drawingService.baseCtx.fillText("hello",0, 0);
}
这是绘图服务:
export class DrawingService {
baseCtx: CanvasRenderingContext2D;
previewCtx: CanvasRenderingContext2D;
cursorCtx: CanvasRenderingContext2D;
canvas: HTMLCanvasElement;
previewCanvas: HTMLCanvasElement;
clearCanvas(context: CanvasRenderingContext2D): void {
//do something
}
这是我的 .spec 文件:
fdescribe('TextService', () => {
let service: TextService;
let drawingServiceSpy: jasmine.SpyObj<DrawingService>;
// const drawingServiceMock = {
// clearCanvas: jasmine.createSpy('clearCanvas'),
// baseCtx : CanvasRenderingContext2D,
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
{ provide: DrawingService, useValue: drawingServiceSpy },
]
});
drawingServiceSpy = jasmine.createSpyObj('DrawingService',['clearCanvas']);
service = TestBed.inject(TextService);
});
it('shoud write on baseCtx', () => {
const ctx = CanvasType.baseCtx;
service['drawingService'].baseCtx.fillStyle = 'red';
service['drawingService'].baseCtx.font = 'Bold 10px Arial';
service['drawingService'].baseCtx.textAlign = 'center' as CanvasTextAlign;
service['writeOnCanvas'](ctx);
expect(drawingServiceSpy.clearCanvas).toHaveBeenCalled();
expect(drawingServiceSpy.baseCtx.fillText).toHaveBeenCalled();
});
我明白了
Cannot set property 'fillStyle' of undefined' error.
我认为问题出在
{
provide: DrawingService,
useValue: drawingServiceSpy
}
我尝试使用 mockClass 但出现错误...
【问题讨论】:
标签: angular typescript unit-testing jasmine