Unit testing 在公共库NPM包内对2个组件进行单元测试无应用程序上下文

Unit testing 在公共库NPM包内对2个组件进行单元测试无应用程序上下文,unit-testing,angular,jasmine,karma-runner,karma-jasmine,Unit Testing,Angular,Jasmine,Karma Runner,Karma Jasmine,我有点被难住了。我曾使用Angular 2快速启动项目作为单元测试Angular 2的参考,但它似乎假设您有一个应用程序在运行。在我的例子中,我们有NPM包,其中包含Angular 2模块,这些模块在我们组织的各个项目中共享。我希望能够独立地对这些公共库中的代码进行单元测试(而不是将它们作为应用程序的一部分) 我想找一些例子,或者是一个教程,或者是一些解释这方面最佳方法的东西,谷歌没有提供任何帮助 我在做业力测试,比如: 创建模拟组件 @Component({ template:

我有点被难住了。我曾使用Angular 2快速启动项目作为单元测试Angular 2的参考,但它似乎假设您有一个应用程序在运行。在我的例子中,我们有NPM包,其中包含Angular 2模块,这些模块在我们组织的各个项目中共享。我希望能够独立地对这些公共库中的代码进行单元测试(而不是将它们作为应用程序的一部分)


我想找一些例子,或者是一个教程,或者是一些解释这方面最佳方法的东西,谷歌没有提供任何帮助

我在做业力测试,比如:

创建模拟组件

@Component({
       template: "",
       selector: 'mock'
})
export class MockComponent implements OnInit {
  constructor() { }
  ngOnInit() {
    console.log("Is loaduing");
  }
}
describe('Component: example', () => {

  beforeEach(() => {
    TestBed.configureTestingModule({ declarations: DECLARATIONS, providers: CONSTANTS_PROVIDERS, imports: [RouterTestingModule.withRoutes(ROUTES)] });
  });

  it('should create an instance', inject([ExampleComponent], (component: ExampleComponent) => {
    expect(component).toBeTruthy();
  }));

});

创建模拟服务

class MockSomeService {
  public subscribe(){}
  public inizialize() {}
}

创建路由数组

export var ROUTES = [ {path:"/pathexample", component: MockComponent}]
export var DECLARATIONS:Component[] = [
  MockComponent, ExampleComponent
];

创建声明数组

export var ROUTES = [ {path:"/pathexample", component: MockComponent}]
export var DECLARATIONS:Component[] = [
  MockComponent, ExampleComponent
];

创建提供者

const CONSTANTS_PROVIDERS: Provider[] = [
  { provide: SomeService, useClass: MockSomeService }
];

编写测试

@Component({
       template: "",
       selector: 'mock'
})
export class MockComponent implements OnInit {
  constructor() { }
  ngOnInit() {
    console.log("Is loaduing");
  }
}
describe('Component: example', () => {

  beforeEach(() => {
    TestBed.configureTestingModule({ declarations: DECLARATIONS, providers: CONSTANTS_PROVIDERS, imports: [RouterTestingModule.withRoutes(ROUTES)] });
  });

  it('should create an instance', inject([ExampleComponent], (component: ExampleComponent) => {
    expect(component).toBeTruthy();
  }));

});
如果您的组件正在使用路由。导航您应该使用TestBed.overrideComponent并向您的组件添加
模板:'
,如果还没有模板,则实际创建组件,如图所示TestBed.createComponent(ExampleComponent)