Модульное тестирование метода в Angular с Кармой / Жасмин - PullRequest
0 голосов
/ 31 марта 2020

Мне нужно протестировать метод в Angular с помощью Jasmine / Karma, но я всегда получаю сообщение об ошибке:

Ошибка типа: undefined не повторяется (не может прочитать свойство Symbol (Symbol.iterator ))

Я построил метод следующим образом:

  myMethod(locs: MyCustomType1[], clocs: MyCustomType2[]) {
    clocs = clocs
      .filter(cl => cl !== null && cl.l_ids !== null);
    locs = locs
      .filter(l => l !== null && l.id !== null);

    clocs.forEach(
      cl => {
        cl['l_names'] = [];
        locs.forEach(
          l => {
            if (cl.l_ids.includes(l.id)) {
              clocs['l_names'].push(l.name);
            }
          }
        );
      }
    );
  }

Мой тест в настоящее время выглядит следующим образом:

  describe('#MyMethod', () => {
    beforeEach(() => {
      component.clocs = mockClocs;
      component.locs = mockLocs;
      component.myMethod(mockLocs, mockClocs);
    });
    describe('#myMethod)', () => {
      it('The clocs and locs array should by defined', () => {
        expect(component.clocs).toBeDefined();
        expect(component.locs).toBeDefined();
      });

      it('The clocs array should include "Location2" and "Location3" with the locationIds 2, 3', () => {
        expect(component.clocs[1]['l_names'].includes('Location2')).toBeTruthy();
        expect(component.clocs[1]['l_names'].includes('Location3')).toBeTruthy();
      });
    });
  });

Указанное сообщение об ошибке выдается для каждый ожидание () метод в моем заявлении it (). Если я регистрирую массив, я вижу, что он определен с необходимыми значениями, но метод wait () возвращает undefined. Хм

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 31 марта 2020

Мне пришлось вызвать ngOnChanges () в методе beforeEach, так как мои массивы заполнены этим методом жизненного цикла. Итак, я решил это так:

  beforeEach(() => {
    fixture = TestBed.createComponent(MyComponent);
    component = fixture.componentInstance;
    component.clocs = mockClocs;
    component.locs = mockLocs;
    component.myMethod(mockLocs, mockClocs);
    component.ngOnChanges();
    fixture.detectChanges();
  });

Я также удалил ненужный блок описания.

Надеюсь, этот ответ поможет. Если у вас есть предложения по улучшению, дайте мне знать:)

0 голосов
/ 31 марта 2020

Вы можете использовать .toEqual ()

      it('The clocs array should include "Location2" and "Location3" with the locationIds 2, 3', () => {
        expect(component.clocs).toEqual([{l_names: ['Location2', 'Location3']}]);
      });
...