Тестирование угловой директивы с использованием ViewContainerRef - PullRequest
0 голосов
/ 09 октября 2019

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

Вот сама директива, метод checkRoles просто перебирает разрешения и проверяет другой массив, чтобы увидеть, существует ли разрешение в этом массиве. Если это так, то хорошо, если нет, то скрывает элемент, к которому он прикреплен.

import { Directive, Input, OnInit, ViewContainerRef } from '@angular/core';
import { AppService } from '../services/app-service.service';

@Directive({
  selector: '[appHasRole]'
})
export class HasRoleDirective implements OnInit {

  @Input() appHasRole: string[];

  constructor(
    private viewContainer: ViewContainerRef,
    private appService: AppService
  ) { }

  ngOnInit() {
    if (Array.isArray(this.appHasRole)) {
      this.checkRoles();
    }
  }

  private checkRoles() {
    this.appHasRole.forEach(role => {
      if (!this.appService.hasPermission(role)) {
        this.removeFromView();
      }
    });
  }

  private removeFromView() {
    this.viewContainer.clear();
  }
}

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

import { HasRoleDirective } from './has-role.directive';
import { Component, DebugElement } from '@angular/core';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { By } from '@angular/platform-browser';

@Component({
  template: `<div [appHasRole]="TEST_ROLE">Testing hasRoleDirective</div>`
})
class TestHasRoleDirective {}

describe('HasRoleDirective', () => {
  let component: TestHasRoleDirective;
  let fixture: ComponentFixture<TestHasRoleDirective>;
  let element: DebugElement;

  beforeEach(() => {
    TestBed.configureTestingModule({
      declarations: [TestHasRoleDirective, HasRoleDirective]
    });
    fixture = TestBed.createComponent(TestHasRoleDirective);
    component = fixture.componentInstance;
    element = fixture.debugElement.query(By.css('div'));
  });

  it('should create an instance', () => {
    const directive = HasRoleDirective;
    expect(directive).toBeTruthy();
  });

  it('should hide the element if the user does not have the role', () => {
    const userPermissions = ['NOT_TEST_ROLE'];
    const neededPermission = ['TEST_ROLE'];
    component.appHasRole = neededPermission;
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...