Angular 2 CLI如何在所有规范中轻松包含RouterTestingModule

时间:2017-04-20 22:02:04

标签: angular karma-jasmine angular2-router

我正在开发一个新项目,并将使用CLI生成应用程序和所有文件,但是我遇到了一些似乎对我很不好的东西,我希望有更好的方法来做到这一点

我的应用程序有路由,所以在我的测试中我需要导入RouterTestingModule来为路由器提供模拟。但是,由于我们创建的每个规范都需要这个,如果在创建新组件时默认包含它,那将非常好。我研究了对自定义蓝图的支持,但目前还没有任何支持,这是一个无赖,因为如果我可以将该模块添加到蓝图中,这将是非常简单的。

默认情况下,还有哪些其他选项可以将其包含在所有规范中,而不需要每个开发人员在创建新组件时都记得添加它?

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

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      declarations: [ LoginComponent ],
      imports: [
        RouterTestingModule, // I don't want to have to manually add this in every spec file.
        SharedModule
      ]
    })
    .compileComponents();
  }));

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

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

1 个答案:

答案 0 :(得分:0)

每个组件都需要路由,这听起来很奇怪。路由应仅注入智能的第一级,第二级组件,其余组件应该转储。

无论如何,如果你真的需要它,你可以创建一个接受TestModuleMetadata对象并在所需的导入内部注入的函数

createTestModule(moduleDef: TestModuleMetadata) {
  let imports = [...(moduleDef.imports||[]), RouterTestingModule];
  return Object.assign({}, moduleDef, {imports});
}