Тест Karma/Jasmine Angular InjectionToken не проходит, если я не использую fdescribe

У меня есть следующий тест спецификации:

      import { HttpClientTestingModule } from '@angular/common/http/testing';
import { Component } from '@angular/core';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { of } from 'rxjs';
import { BASE_API_URL } from 'src/app/tokens/baseApiUrl.token';
import { RbacPermissionsService } from '../services/rbac-permissions.service';
import { SharedModule } from '../shared.module';

@Component({
  selector: 'app-mock-test',
  template: `<div *appHasPermission="{ items: 'view' }"></div>`,
  providers: []
})
export class MockTestComponent {
  constructor() {}
}

describe('HasPermissionDirective', () => {
  let mockTestComponent: MockTestComponent;
  let mockTestFixture: ComponentFixture<MockTestComponent>;
  let rbacPermissionsService: RbacPermissionsService;

  beforeEach(() => {
    TestBed.configureTestingModule({
      declarations: [MockTestComponent],
      imports: [SharedModule, HttpClientTestingModule],
      providers: [{provide: BASE_API_URL, useValue: '/some_api/'}]
    });

    rbacPermissionsService = TestBed.get(RbacPermissionsService);
    mockTestFixture = TestBed.createComponent(MockTestComponent);
    mockTestComponent = mockTestFixture.componentInstance;
  });

  it('should have no divs when permission is false', done => {
    spyOn(rbacPermissionsService, 'getPermission').and.returnValue(of(false));
    mockTestFixture.whenStable().then(() => {
      mockTestFixture.detectChanges();
      const divs = mockTestFixture.nativeElement.getElementsByTagName('div');
      expect(divs.length).toBeFalsy();
      done();
    });
  });

  it('should have a visible view element when permission is true', done => {
    spyOn(rbacPermissionsService, 'getPermission').and.returnValue(of(true));
    mockTestFixture.whenStable().then(() => {
      mockTestFixture.detectChanges();
      const divs = mockTestFixture.nativeElement.getElementsByTagName('div');
      expect(divs.length).toBeTruthy();
      done();
    });
  });
});

Когда я запускаю это вместе со всеми другими тестами, он завершается с ошибкой:

      NullInjectorError: StaticInjectorError(DynamicTestModule)[InjectionToken ]: 
  StaticInjectorError(Platform: core)[InjectionToken ]: 
    NullInjectorError: No provider for InjectionToken !

Но когда я запускаю его с тесты проходят.

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

0 ответов

Другие вопросы по тегам