Получение ошибки при модульном тестировании метода угловых составляющих? - PullRequest
0 голосов
/ 10 ноября 2019

Я запускаю модульное тестирование, которое не проходит. Пожалуйста, посмотрите на мой код:

Это мой файл машинописи:

  allData: any;
  constructor(@Inject(MAT_DIALOG_DATA) private data,
    private dialogRef: MatDialogRef<MyComponent>,
    private _service: SampleService,
    private _router: Router) {
  }
  ngOnInit() {
    this.loadValue();
  }
  loadValue() {
    this._service.returnData().subscribe(res => {
      this.allData = res;
    })
  }

Это моя реализация файла службы:

  //SampleService
  returnData(){
    const users=[{ id: "01", name:"Andrew" }, { id: "02", name:"Shaun" }];
    return of(users);
  }

Это мой файл спецификации:

describe('MyComponent', () => {
  let component: MyComponent;
  let fixture: ComponentFixture<MyComponent>;
  let el: DebugElement;
  let sampleservice: SampleService;

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      declarations: [MyComponent],
      schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA],
      imports: [MatDialogModule],
      providers: [
        {
          provide: MAT_DIALOG_DATA, useValue: { action: "add" },
        },
        {
          provide: MatDialogRef, useValue: { MyComponent}
        },
        {
          provide: Router
        },
        {
          provide: SampleService
        }
      ]
    }).compileComponents()
  }));
  beforeEach(() => {
    fixture = TestBed.createComponent(MyComponent);
    el = fixture.debugElement;
    component = fixture.componentInstance;
    sampleservice = new SampleService();
  })

Мой контрольный пример:

  it("should call the loadvalue and fill the allData", () => {
    let users = [{ id: "01", name: "John" }, { id: "02", name: "Wick" }];
    component.loadValue();
    spyOn(sampleservice, 'returnData').and.returnValue(of(users));
    expect(component.allData).toBe(users);
  })

Я хочу вызватьloadvalue() и ожидаем, что переменная allData заполнится фиктивным ответом, используя spyOn. Но когда я запускаю этот тестовый пример, я получаю сообщение об ошибке:

TypeError: Не удается прочитать свойство 'returnData' из неопределенного

Что я делаю здесь неправильно? Любая помощь приветствуется. Спасибо!

1 Ответ

1 голос
/ 10 ноября 2019

Попробуйте:

sampleservice = TestBed.get(SampleService);

И замените

{
  provide: SampleService
},

просто:

SampleService,

И в вашем тесте:

it("should call the loadvalue and fill the allData", () => {
  spyOn(sampleservice, 'returnData').and.returnValue(of(users));
  fixture.detectChanges();

  let users = [{ id: "01", name: "John" }, { id: "02", name: "Wick" }];
  component.loadValue();
  expect(component.allData).toBe(users);
})
...