Angular модульный тест для импортированного локального JSON файла - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь выполнить модульный тест для локального JSON файла.

Ниже приведен файл компонента:

import { Component, OnInit } from '@angular/core';
import user from '../../../models/user.json';
import group from '../../../models/user/group.json';

@Component({
  selector: 'users',
  templateUrl: './users.component.html',
  styleUrls: ['./users.component.scss'],
})
export class UsersComponent implements OnInit {
  data;
  subGroups = [];
  constructor() {this.data = user, this.subGroups[group.label] = group ; }

  ngOnInit() {
  }

}

Это файл spe c:

import { async, ComponentFixture, TestBed } from '@angular/core/testing';

import { UsersComponent } from './users.component';
import { ModelComponent } from '../model/model.component';

fdescribe('UsersComponent', () => {
  let component: UsersComponent;
  let fixture: ComponentFixture<UsersComponent>;
  const user: any = require('../../../mocks/model.json');
  const group: any = require('../../../mocks/subModel.json');

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      declarations: [UsersComponent],
      imports: [],
    })
      .compileComponents();
  }));

  beforeEach(() => {
    fixture = TestBed.createComponent(UsersComponent);
    component = fixture.componentInstance;
    component.data = user;
    component.subGroups[group.label] = group;
    fixture.detectChanges();
  });

  it('should create', () => {
    expect(component).toBeTruthy();
  });

  it('value of data should equal value of imported JSON primary model', () => {
    expect(component.data.label).toBe('Model');
  });

  it('should assign subModel value to SubGroupsArray', () => {
    expect(component.subGroups['SubModel']['label']).toBe('SubModel');
  });
});

Это JSON файлы:

модель. json:

{
    "label": "Model",
    "name" : "user",
}

subModel. json:

{
    "label": "SubModel",
    "name": "group",
}

Проблема в том, что модульный тест иногда дает сбой, а иногда нет (без каких-либо дальнейших изменений в файле spe c, особенно когда я запускаю этот модульный тест с другими компонентами).

Ниже приведен ошибка:

TypeError: Вы указали недопустимый объект, где ожидался поток. Вы можете предоставить Observable, Promise, Array или Iterable.

Цените вашу поддержку.

Спасибо,

1 Ответ

0 голосов
/ 12 апреля 2020

Для любого, кто сталкивался с этим вопросом, я понял, что мне не нужно переделывать логи c, сделанные в конструкторе, фактически все логи c конструктора выполняются с помощью testBest, даже реальные JSON файлы импортируются, и мне даже не нужно импортировать фиктивный JSON файл. Это привело меня к вопросу, действительно ли необходимо тестировать конструкторы Angular компонентов.

В любом случае, проблема, с которой я столкнулся, не была связана с JSON в конце концов. Проблема заключалась в том, что я тестировал два компонента, которые используют один и тот же селектор шаблона, поэтому, когда шаблон отображался дважды, интеграционные тесты не выполнялись.

Все, что мне нужно сделать, это удалить (fixture.detectChanges ()) которые не были нужны в моем случае.

Спасибо,

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