Quiero probar mi servicio en angular con karma y jasmine, comienzo con pruebas unitarias y no encuentro ninguna solución para mi caso o porque no sé cómo puedo solucionar el problema. Siempre tengo un problema con mis campos que a menudo no están definidos, no entiendo por qué. Si me pueden explicar cuál es el problema real, será muy bueno poder progresar en mis pruebas.
mi servicio
import { Injectable } from '@angular/core'; @Injectable({ providedIn: 'root' }) export class CanvasElementService { public canvasContainer: HTMLDivElement; private scaleProperty: string = 'scale(1)'; public updateScale(scale: number) { this.scaleProperty = `scale(${scale})`; this.update(); } public update(): void { this.canvasContainer.style.transform = this.scaleProperty; } }y mi prueba
import { Component } from '@angular/core'; import { TestBed } from '@angular/core/testing'; import { CanvasElementService } from './canvas-element.service'; fdescribe('CanvasElementService', () => { let service: CanvasElementService; beforeEach(() => { TestBed.configureTestingModule({}); service = TestBed.inject(CanvasElementService); }); it('should be created', () => { expect(service).toBeTruthy(); }); describe("updateScale", () => { it("updatescale 2", () => { let scale = 3; spyOn(service, 'update').and.callThrough(); service.updateScale(scale); expect(service['scaleProperty']).toBe('scale(3)'); }); }); });Después de ejecutar la prueba, obtuve:
gracias por la ayuda Si tienes alguna idea para solucionarlo.
No estoy muy seguro de cómo acceder a un htmlElement en services. Creo que solo está destinado a ser utilizado por componentes (que tienen acceso a elementos a través del decorador @ViewChild()).
Puede intentar lograrlo inyectando su documento en el constructor del servicio y buscando su elemento. Algo como esto:
constructor(@Inject(DOCUMENT) private document: HTMLDocument) {}Pero realmente no se recomienda usar servicios para acceder a su dom. Utilice componentes o directivas para ello.
https://medium.com/@smarth55/angular-bad-practices-patterns-service-that-touch-the-dom-57ea978dca92