Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Karma-jasmine How i test a close function in a modal

I need to test this, but I’m new testing and I do not have idea, I’m working with angular, I just want to test the close function and maybe if it renders.

This is the html.

<div class="modal active" *ngIf="active" id="modal">
    <div class="modal-dialog modal-lg" role="document">
      <div class="modal-content">
        <div class="modal-header">
          <h1 class="modal-title">{{tittle}}</h1>
          <button type="button" class="close" (click)="close()">
            <span aria-hidden="true">&times;</span>
          </button>
        </div>
        <div class="modal-body">
          <ng-content select="[modal-body]"></ng-content>
          <div modal-body>
            <h5 class="modal-description">{{description}}</h5>
          </div>
        </div>
        <div class="modal-footer">
          <ng-content select="[modal-footer]"></ng-content>
          <button type="button" class="btn btn-secondary" (click)="close()">Close</button>
        </div>
      </div>
    </div>
    <div class="modal-background" (click)="close()"></div>
  </div>

And this is the modal.component.ts

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel


import { Component, Input, Output, EventEmitter } from '@angular/core';

@Component({
  selector: 'app-modal',
  templateUrl: './modal.component.html',
  styleUrls: ['./modal.component.css']
})
export class ModalComponent {

  @Input() tittle: string = ''
  @Input() description: string = ''
  @Input() active: boolean = false;
  @Output() activeChange = new EventEmitter<boolean>();

  close() {
    this.active = false;
    this.activeChange.emit(this.active);
  }
}

>Solution :

In order to test if EventEmitter emits an event when clicking on background div, you should write a test using spyOn like this:

it('should emit event for closing a modal on click event on background div', () => {
        spyOn(component.activeChange, 'emit');

        component.close();

        expect(component.activeChange.emit).toHaveBeenCalled();
    });

Make sure you have access to component, by having these lines in beforeEach block:

beforeEach(() => {
    fixture = TestBed.createComponent(ModalComponent);
    component = fixture.componentInstance;

    fixture.detectChanges();
});
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading