【问题标题】:cannot read property setNumber of undefined getting in Unit testing error无法读取单元测试错误中未定义的属性 setNumber
【发布时间】:2020-09-19 17:05:00
【问题描述】:

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

TypeError: 无法读取未定义的属性“setNumber”

这是我的服务方法

 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: 无法读取未定义的属性“setNumber”

【问题讨论】:

  • 等一下,你expect(service.setNumber).to//...,但还没有在任何地方声明变量service?还是缺少什​​么?

标签: angular jasmine karma-jasmine


【解决方案1】:

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

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

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

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



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

【讨论】:

  • 我的代码中已经有这一行 const spyDataService = jasmine.createSpyObj('DataService', ['setNumber']) { provide: DataService, useValue: spyDataService },但我仍然收到同样的错误
  • 我已经用规范编辑了我的答案。我希望您以类似的方式检索服务实例。我建议你写完整的测试文件代码和错误截图
  • 是的,让服务:DataService
  • 这个语句什么时候执行 -> this.dataService.setNumber(null); ??里面有什么方法吗??请提供该方法的代码以及您如何初始化服务和测试文件
  • 是在ngoninit()里面:void { this.dataService.setNumber(null) }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-22
  • 2018-07-01
  • 2019-12-30
  • 2017-06-16
  • 2021-12-02
  • 2017-10-13
  • 1970-01-01
相关资源
最近更新 更多