Friday, March 18, 2022

Angular 13 + Jest - Sample Test

 


import { HttpClientTestingModule } from '@angular/common/http/testing';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { MatButtonModule } from '@angular/material/button';
import { MatCardModule } from '@angular/material/card';
import { MatNativeDateModule, MatRippleModule } from '@angular/material/core';
import { MatDatepickerModule } from '@angular/material/datepicker';
import { MatDialogModule, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
import { MatDividerModule } from '@angular/material/divider';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatGridListModule } from '@angular/material/grid-list';
import { MatIconModule } from '@angular/material/icon';
import { MatInputModule } from '@angular/material/input';
import { MatListModule } from '@angular/material/list';
import { MatMenuModule } from '@angular/material/menu';
import { MatPaginatorModule } from '@angular/material/paginator';
import { MatProgressBarModule } from '@angular/material/progress-bar';
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
import { MatSelectModule } from '@angular/material/select';
import { MatSidenavModule } from '@angular/material/sidenav';
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
import { MatSnackBarModule } from '@angular/material/snack-bar';
import { MatSortModule } from '@angular/material/sort';
import { MatTableModule } from '@angular/material/table';
import { MatTabsModule } from '@angular/material/tabs';
import { MatToolbarModule } from '@angular/material/toolbar';
import { MatTooltipModule } from '@angular/material/tooltip';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { RouterTestingModule } from '@angular/router/testing';
import { Interval } from '../model/interval';
import { Selection } from '../model/selection';
import { SelectionQuery } from '../store/selection.query';
import moment from 'moment';
import { MessageDialogComponent } from './message-dialog.component';
import { AuthenticationService } from '../_services/authentication.service';
import { BehaviorSubject, Observable } from 'rxjs';
import { MatRadioModule } from '@angular/material/radio';
import { Messages } from '../model/messages';
import { MessageService } from '../_services/message.service';

describe('MessageDialogComponent', () => {
let component: MessageDialogComponent;
let fixture: ComponentFixture<MessageDialogComponent>;
let selectionQueryStub: SelectionQuery;
let authServiceStub: AuthenticationService;
let messageServiceStub: MessageService;

const mockSelectedData = {
'id': 'dummy',
'data': 'CEZ10001E',
'selection': {
'date': '2022-03-18T00:00:00.000Z',
'detailDate': '2022-03-18T00:00:00.000Z',
'system': 'UTCPLXJ8.J90',
'id': 'dummy',
'tabId': 'dummy',
'interval': {
'startTime': '2022-03-18T02:20:00.000Z',
'endTime': '2022-03-18T02:30:00.000Z'
},
'score': 71.9
}
};
const mockInterval: Interval = {
startTime: moment(new Date(2021, 0, 8)),
endTime: moment('25/12/2016', 'DD/MM/YYYY')
}
const mockSelection: Selection = {
id: '1',
date: new Date(),
detailDate: new Date(2021, 11, 5),
sysplexSystem: 'sysplex',
system: 'system',
interval: mockInterval,
score: 1,
tabId: '1',
}

const mockGetAllMessages: Observable<Messages> = new BehaviorSubject<any>({
id: 1,
system: 'system',
ignoreData:
{
data: {
msgList: [
{
ignoreTime: '1647465405385',
ignoreType: 'NEXTTRAIN',
msgId: 'BPXP024I'
},
{
ignoreTime: '1647610563696',
ignoreType: 'NEXTTRAIN',
msgId: 'CEZ10001E'
}
],
failedMsgs: []
},
'reasoncode': 0,
'returncode': 0
}
});

beforeEach(async () => {
await TestBed.configureTestingModule({
providers: [
{
provide: MatDialogRef,
useValue: {}
},
{
provide: MAT_DIALOG_DATA, useValue: mockSelectedData
}],
imports: [
BrowserAnimationsModule,
FormsModule,
HttpClientTestingModule,
RouterTestingModule,
ReactiveFormsModule,
MatFormFieldModule,
MatButtonModule, MatCardModule,
MatDatepickerModule, MatDialogModule, MatDividerModule,
MatGridListModule, MatIconModule, MatInputModule,
MatListModule, MatMenuModule, MatNativeDateModule, MatPaginatorModule,
MatProgressBarModule, MatProgressSpinnerModule, MatRadioModule, MatRippleModule,
MatSelectModule, MatSidenavModule, MatSlideToggleModule,
MatSnackBarModule, MatSortModule, MatTableModule,
MatTabsModule, MatToolbarModule, MatTooltipModule,
],
declarations: [MessageDialogComponent]
})
.compileComponents();
});

beforeEach(() => {
authServiceStub = TestBed.inject(AuthenticationService);
jest.spyOn(authServiceStub, 'checkIfTokenExpired').mockReturnValue(new BehaviorSubject<boolean>(false));

selectionQueryStub = TestBed.inject(SelectionQuery);
jest.spyOn(selectionQueryStub, 'getEntity').mockReturnValue(mockSelection);

messageServiceStub = TestBed.inject(MessageService);
jest.spyOn(messageServiceStub, 'getAllMessagesStatus').mockReturnValue(mockGetAllMessages);

fixture = TestBed.createComponent(MessageDialogComponent);
component = fixture.componentInstance;
component.goToManageIgnoreMsg = false;
fixture.detectChanges();
});

it('should create', () => {
expect(component).toBeTruthy();
});
});

No comments:

Post a Comment