Получить сообщение об ошибке «Ожидаемый шпион <functionName>был вызван» в угловых 6 Жасмин - PullRequest
0 голосов
/ 15 июня 2019

У меня есть метод "onEdit" в компоненте. В этом методе я вызвал сервисный метод «getAttributeById», я делаю вызов API в сервисном методе «getAttributeById» и возвращаю наблюдаемый объект, и я пишу для него пример модульного теста, но получаю ошибку

"Ожидаемый шпион getAttributeById был вызван."

onEdit(row) {
    if (this.role != 'Admin' && this.role != 'Owner') {
      return;
    }
    this.loadingData = true;
    this._service.getAttributeById(row['id']).subscribe((data) => {
      this.editing = true;
      this.newAttribute = { ...data };
      data.isEdit = true;

      this.loadingData = false;
      this._service.setData({attribute: this.newAttribute});
      this.router.navigate(['attributes-edit']);
    })   }

файл спецификаций

describe('MetaDataComponent', () => {
  let component: MetaDataComponent;
  let fixture: ComponentFixture<MetaDataComponent>;
  beforeEach(() => {
    const metaDataServiceStub = {
      getVariables: query1 => ({ subscribe: () => ({}) }),
      getAttributeById: arg1 => ({ subscribe: () => ({}) }),
      setData: object1 => ({}),
      deleteAttribute: arg1 => ({ subscribe: () => ({}) })
    };
    const routerStub = { navigate: array1 => ({}) };
    TestBed.configureTestingModule({
      schemas: [NO_ERRORS_SCHEMA],
      declarations: [MetaDataComponent],
      providers: [
        { provide: MetaDataService, useValue: metaDataServiceStub },
        { provide: Router, useValue: routerStub }
      ]
    });
    spyOn(MetaDataComponent.prototype, 'getAttributes');
    fixture = TestBed.createComponent(MetaDataComponent);
    component = fixture.componentInstance;
  });
it('onEdit', () => {
      const payload = {id: '11111'};
      const metaDataServiceStub: MetaDataService = fixture.debugElement.injector.get(MetaDataService);
      const editSpy = spyOn(metaDataServiceStub, 'getAttributeById').and.returnValue(of({}));
      expect(component.onEdit(payload)).toBeUndefined();
      expect(editSpy).toHaveBeenCalled();
    });

Я получаю ошибку ниже

Expected spy getAttributeById to have been called.
Error: Expected spy getAttributeById to have been called.
    at stack (http://localhost:9876/absoluteC:/Users/U1192079/Projects/r2d2-ui/node_modules/jasmine-core/lib/jasmine-core/jasmine.js?0b1eaf7a13cae32191eadea482cfc96ae41fc22b:2455:17)
    at buildExpectationResult (http://localhost:9876/absoluteC:/Users/U1192079/Projects/r2d2-ui/node_modules/jasmine-core/lib/jasmine-core/jasmine.js?0b1eaf7a13cae32191eadea482cfc96ae41fc22b:2425:14)
    at Spec.expectationResultFactory (http://localhost:9876/absoluteC:/Users/U1192079/Projects/r2d2-ui/node_modules/jasmine-core/lib/jasmine-core/jasmine.js?0b1eaf7a13cae32191eadea482cfc96ae41fc22b:901:18)
    at Spec.addExpectationResult (http://localhost:9876/absoluteC:/Users/U1192079/Projects/r2d2-ui/node_modules/jasmine-core/lib/jasmine-core/jasmine.js?0b1eaf7a13cae32191eadea482cfc96ae41fc22b:524:34)
    at Ex

1 Ответ

1 голос
/ 15 июня 2019

Я не эксперт по этой среде тестирования, но замечаю строку

const editSpy = spyOn (metaDataServiceStub, 'getAttributeById'). And.returnValue (of ({}));

Я не знаю, является ли часть ".and.refurnValue" частью соответствия. Если это так, я думаю, что метод getAttributeById считается «вызываемым», вы говорите, что он должен возвращать пустой объект .... Что я думаю, что он никогда не будет делать, потому что вы настроили его для возврата объекта, который содержит подписку () метод при вызове.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...