【发布时间】:2016-10-28 16:28:39
【问题描述】:
我正在尝试为一个复合组件编写测试,其中填充了一个 observable,但因为这是我正在编写的第一个 Angular2 测试之一。
我有一个名为 ListContainerComponent 的组件,它使用 Observable list$ 和 ListItemComponent 的子实例填充。
ListContainerComponent的模板如下:
<list-item
*ngFor="let listItem of (list$ | async)" [item]="listItem"></list-item>
在浏览器中效果很好。然而,测试打破了[item] 据称不是ListItemComponent 的已知属性,这并不完全正确,因为它确实包含@Input() item。
import { TestBed, async, ComponentFixture } from '@angular/core/testing';
import { ListContainerComponent } from './list-container.component';
import { Store, StoreModule } from '@ngrx/store';
import * as fromRoot from '../../../reducers';
import { Observable } from 'rxjs';
import { reducer } from '../../../reducers/list.reducer';
describe('Component: ListContainer', () => {
let storeStub;
let component: ListContainerComponent;
let fixture: ComponentFixture<ListContainerComponent>;
let element: HTMLElement;
beforeEach(() => {
storeStub = {
items: []
};
TestBed.configureTestingModule({
declarations: [
ListContainerComponent
],
providers: [
{provide: Store, useValue: storeStub}
],
imports: [
StoreModule.provideStore(reducer),
]
})
.compileComponents();
fixture = TestBed.createComponent(ListContainerComponent);
component = fixture.componentInstance;
element = fixture.nativeElement;
});
it('should populate list', async(() => {
component.list$ = Observable.of([
{name: 'abc', value: 'content of abc'},
]};
fixture.detectChanges();
expect(element.querySelectorAll('h4').length).toBeGreaterThan(0);
}));
});
对不起,我没有提供一个可以工作的 plunker,但我还不知道如何在 plunker 中创建测试。我相信我所犯的错误很明显,可能表明我的方法错误,并且很容易被知情人士发现。
【问题讨论】: