我正在开发一个 Angular 2-rc3 应用程序,我设置了一些单元测试,它们正在工作,是的!我只是不明白为什么必须按照他们的方式编写它们。更令人惊奇的是,我看到的所有 例子都有相同的方法。具体来说,这些问题是我的首要问题:
为什么
TestComponentBuilder
在每个单元测试中都配置?it('shows list of blog items by default', inject([TestComponentBuilder], (tcb: TestComponentBuilder) => { return tcb .overrideProviders(BlogRoll, [provide(BlogService, { useValue: mockBlogService })]) .createAsync(BlogRoll) .then((fixture) => { // actual test code }); });
这已经是每个单元测试额外的七行代码,我的代码的可读性因此受到很大影响。我试过把它放在
beforeEach()
:beforeEach(inject([TestComponentBuilder], (tcb: TestComponentBuilder) => { console.log('beforeEach'); return tcb.overrideProviders(BlogRoll, [provide(BlogService, { useValue: mockBlogService })]) .createAsync(BlogRoll) .then(fixture => { // this never gets printed console.log('in then:', fixture.componentInstance); }); }));
但是 Karma 似乎无法处理异步,
then
just 中的所有内容都没有被执行。这是一个错误还是这是故意的,我们不应该这样做吗?为什么这个组件的创建需要异步发生?TestComponentBuilder 类
createSync()
上有一个,我们不能使用它吗?当然我试过了,发现函数签名不同:和. 为什么我们这里需要一个组件工厂,为什么我们在创建组件异步时不需要它?// 更新:RC4 已经发布,现在接受一个类型。伟大的。createAsync(rootComponentType: Type) : Promise<ComponentFixture<any>>
createSync(componentFactory: ComponentFactory<C>) : ComponentFixture<C>
createSync()
我的理智已经谢谢你了!