Angular 7 Jasmine и Restangular: Невозможно получить правильную конфигурацию модуля тестирования - PullRequest
0 голосов
/ 20 мая 2019

Учитывая, интерфейсный компонент, который импортирует RestAngular, объявляет его в CTOR и использует его в ngOnInit, как показано здесь:

import { Restangular } from 'ngx-restangular'

constructor(
    private Restangular: Restangular,
    private ChangeDetectorRef: ChangeDetectorRef,

  ) { }

ngOnInit() {
 this.Restangular.all("Person")
      .all("Kind")
      .getList()
      .subscribe(pTypes => {
        this.personTypes = pTypes;
      }); 
}

Приведенный выше код отлично работает, когда он подается.

Я пытаюсь заставить Жасмин создать этот класс, который задохнулся от Restangular. Поэтому я включил следующие провайдеры следующим образом:

  beforeEach(async () => {
    TestBed.configureTestingModule({
      providers:[Restangular, RestangularHttp, HttpBackend],

Похоже, это исправило все зависимости Restrict, но теперь я вижу это:

Теперь я вижу это из-за ошибки TypeError: this.http.handle не является функцией this.http.handle is not a function

Я не понимаю, почему на стороне Жасмин я все-таки должен предоставить эти зависимости, разве интерфейсный компонент не справляется с ними просто отлично? Почему жасмин не создает экземпляр интерфейса, как это делает Angular? По-видимому, это вызвано тем, что «реальный» экземпляр Restangular не вводится.

1 Ответ

0 голосов
/ 20 мая 2019

Решение: Если интерфейсный компонент пытается использовать Restangular, тест Жасмин должен импортировать Restangular Module. Как это:

import { RestangularModule } from "ngx-restangular"

  beforeEach(async () => {
    TestBed.configureTestingModule({      
      imports: [FontAwesomeModule, FormsModule, ReactiveFormsModule, NgSelectModule, RestangularModule],

Это позволит минимально создать компонент в этом коде

  beforeEach(() => {

    fixture = TestBed.createComponent(Component);
    component = fixture.componentInstance;

После создания компонента он выполняет код ngOnInit, содержащий ограниченный вызов, например:

this.Restangular.all("Something")()
  .subscribe(pTypes => {
    this.personTypes = pTypes;
  });

Если приведенный выше вызов Restangular завершится неудачно, тест не уловит этого, поскольку компонент уже создан! Вы должны указать конкретные операторы ожидаемого выполнения для связанных полей данных (для вызова Restrict), чтобы провалить тест, если вызов не удался.

...