Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

109
Vistas
TypeError: this.canvasContainer no está definido en la prueba de unidad Angular

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:

ingrese la descripción de la imagen aquí

gracias por la ayuda Si tienes alguna idea para solucionarlo.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

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

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda