Как проверить, что мое приложение Angular 8 использует защиту (но не проверяет защиту)? - PullRequest
0 голосов
/ 17 октября 2019

У меня есть защита, которая запрещает любому пользователю использовать приложение без входа в систему.

Защита находится в своем собственном модуле и отделена от моего приложения. Таким образом, я не хочу проверять саму охрану, а скорее, что она используется. Чтобы уточнить: я хочу, чтобы тест не прошел, если кто-то по ошибке удалил строку canActivate: [MyGuard], из маршрутизатора и передал иначе.

Я предполагал, что способ сделать это - шпионить за методом canActivateохранник, а затем вставьте этот охранник в маршрутизатор.

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

Это то, что яесть, что, конечно, дает сбой, потому что маршрутизатор вообще никогда не используется:

// app.routing.ts
const routes: Routes = [
  {
    path: '',
    canActivate: [IsAuthenticatedGuard], // this is what I want to make sure is present
    children: [{ path: '', pathMatch: 'full', component: HomeComponent }],
  },
];
// myspec.spec.ts
describe('AppComponent', () => {
  let component: AppComponent;
  let fixture: ComponentFixture<AppComponent>;
  let canActivateSpy: jasmine.Spy;
  let isAuthenticatedGuard: IsAuthenticatedGuard;

  beforeAll(async(() => {
    TestBed.configureTestingModule({
      imports: [
        RouterTestingModule,
        ..., // a bunch of other imports that aren't relevant to that question
      ],
      declarations: [AppComponent],
    });
    fixture = TestBed.createComponent(AppComponent);
    isAuthenticatedGuard = fixture.debugElement.injector.get(
      IsAuthenticatedGuard,
    );
    canActivateSpy = spyOn(isAuthenticatedGuard, 'canActivate');
    fixture.detectChanges();
    component = fixture.componentInstance;
  }));

  it('should have a guard', () => {
    expect(canActivateSpy.calls.any()).toBe(true);
  });

Как бы я протестировал это с Angular 8?

...