Angular 2+ UI-具有相对 uiSref 的路由器单元测试

Angular 2+ UI-Router Unit test with relative uiSref

我有一个 Angular 组件 (9.1.3),上面有一个 UI-Router 相对路由:

<button class="ls-btn light-blue-btn new-btn" uiSref=".new">
  <span class="fa fa-plus"></span>
  <span class="new-btn-text">New Tournament</span>
</button>

<ui-view></ui-view>

当我 运行 应用程序时,一切都按我预期的那样工作,但是当对组件 运行s 进行单元测试时,我得到一个错误:

No reference point given for path '.new'

单元测试的代码是最基本的:

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

import { TournamentsViewComponent } from './tournaments-view.component';
import { UIRouterModule } from '@uirouter/angular';
import { APP_BASE_HREF } from '@angular/common';

describe('TournamentsViewComponent', () => {
  let component: TournamentsViewComponent;
  let fixture: ComponentFixture<TournamentsViewComponent>;

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      imports: [ UIRouterModule.forRoot() ],
      declarations: [ TournamentsViewComponent ],
      providers: [{ provide: APP_BASE_HREF, useValue: '/' }]
    })
    .compileComponents();
  }));

  beforeEach(() => {
    fixture = TestBed.createComponent(TournamentsViewComponent);
    component = fixture.componentInstance;
    fixture.detectChanges();
  });

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

我曾尝试将一些状态添加到 UIRouterModule.forRoot(),但这会产生相同的错误 - 我也曾尝试将 /base 用于 APP_BASE_HREF

我看过 uiSref 上的 UI-Router docs,其中提到

If a component template uses a relative uiSref, e.g., uiSref=".child", the reference is relative to that component's state.

添加状态无效,基础变体无效;有人可以帮我找到我丢失的东西吗?

我找到了解决方法。我不必保持相对路径直接,而是将模块的所有完全限定状态名称放入映射中,因此使用 StateService 的任何组件都可以准确地到达它想要的位置。

在配置文件中:

export const STATE_NAMES = {
  state1: some.place.in.app,
  state2: some.place.in.app.child1,
  state3: some.place.in.app.child2
}

然后组件中的一个函数来处理路由变化:

goToState () {
  this.stateService.go(STATE_NAMES.state2);
}

不确定这是否是 'right' 的方法,但它使代码保持整洁,所以这就是我要使用的方法。