es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

window.addEventListener probando con jasmine

Tengo una pregunta después de muchas horas de búsqueda, pero no puedo encontrar una solución.

Servicio en AngularJS:

Está utilizando WebView para recibir datos.

Estoy intentando implementar algunas pruebas de Jasmine para esto, pero ¿cómo nos conectamos al addEventListener ‘message’ ya que se está utilizando en una ventana? ¿Y cómo lo activamos? ¿Existe alguna manera de hacer esto con una simulación de la ventana?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para simular la ventana y probar la función addEventListener(), se puede utilizar una biblioteca llamada jsdom. Aquí hay un ejemplo de cómo utilizarlo:

    import { TestBed } from '@angular/core/testing';
    import { Subject } from 'rxjs';
    import { WindowService } from './window.service';
    
    describe('WindowService', () => {
      let service: WindowService;
      let mockWindow: any;
    
      beforeEach(() => {
        mockWindow = {
          chrome: {
            webview: {
              addEventListener: jasmine.createSpy('addEventListener')
            }
          }
        };
    
        TestBed.configureTestingModule({
          providers: [
            WindowService,
            { provide: 'Window', useFactory: () => mockWindow }
          ]
        });
    
        service = TestBed.inject(WindowService);
      });
    
      it('should subscribe to webview message', () => {
        const subject = new Subject<any>();
    
        service.webViewMessage.subscribe((data) => {
          expect(data).toEqual('test message');
        });
    
        mockWindow.chrome.webview.addEventListener.calls.argsFor(0)[1]({ data: 'test message' });
      });
    });
    

    En este ejemplo, se está creando un espía para la función addEventListener() e inyectando un objeto falso de Window que incluye al espía. Luego, se está suscribiendo al observable webViewMessage y esperando que emita un valor 'test message'. Finalmente, se está llamando a la función addEventListener() con un evento falso que incluye el valor 'test message'. Esto debería activar el observable webViewMessage para emitir el mismo valor y aprobar la prueba.

Comments are closed.