0
votes

I am trying to unit testing my code where I am getting the below error

TypeError: Cannot read property 'setNumber' of undefined

this is my service method for that

 setNumber(number) {
   this.number = number;
 }

This code is there in ts

this.dataService.setNumber(null);

This is my spec code.

  beforeEach(async(() => {
   const spyDataService = jasmine.createSpyObj('DataService', ['setNumber'])
  TestBed.configureTestingModule({
  imports: [HttpClientTestingModule, MatDialogModule, BrowserAnimationsModule, RouterTestingModule, MatMenuModule, MatFormFieldModule, MatInputModule, MatPaginatorModule, MatTableModule, MatSortModule, MatIconModule, MatCardModule,],
  declarations: [DashboardComponent],
  providers: [

    { provide: DataService, useValue: spyDataService },
    { provide: MAT_DIALOG_DATA, useValue: {} },
    { provide: MatDialogRef, useValue: {} },
    { provide: LayoutUtilsService, useValue: {} }

  ],
  schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
  .compileComponents();

}));

  it('should be create data service', () => {
   expect(service.setNumber).toHaveBeenCalledWith(null);
 });

What is wrong here why I am getting this error

TypeError: Cannot read property 'setNumber' of undefined

1
Wait a minute, do you expect(service.setNumber).to//..., but haven't declared the variable service anywhere? Or is something still missing? - mbojko

1 Answers

1
votes

You have to mock the dataService setNumber method inside beforeEach of the testing portion.

// const mockDataService = jasmine.createSpyObj('YourServiceName', ['methodname']);
const mockDataService = jasmine.createSpyObj('DataService', ['setNumber']);

After this you need to use this mockDataservice inside the providers array of testing module.

providers: [
  {provide: Dataservice, useValue: mockDataService }
]



it('should be create data service', () => {
   expect(service.setNumber).toHaveBeenCalledWith(null);
 });