无法读取 属性 setNumber of undefined getting in Unit testing 错误

cannot read property setNumber of undefined getting in Unit testing error

我正在尝试对我的代码进行单元测试,但出现以下错误

TypeError: Cannot read property 'setNumber' of undefined

这是我的服务方式

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

这段代码在 ts

this.dataService.setNumber(null);

这是我的规范代码。

  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);
 });

我收到此错误的原因是什么?

TypeError: Cannot read property 'setNumber' of undefined

你必须在 beforeEach 测试部分中模拟 dataService setNumber 方法。

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

在此之后,您需要在测试模块的提供程序数组中使用这个 mockDataservice。

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



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