由于某些原因,这两个规格正在通过,但第二个规范是在模板中测试插值,使用来自服务的异步数据。为什么没有必要用async包装回调函数?
describe('SaangComponent', () => {
let component: SaangComponent;
let fixture: ComponentFixture<SaangComponent>;
let compiled: HTMLElement;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ SaangComponent ],
providers: [
{provide: GetSomeService, useValue: getSomeServiceMock}
]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(SaangComponent);
component = fixture.componentInstance;
compiled = fixture.debugElement.query(By.css('h1')).nativeElement;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
it('should update the h1 attribute with the title', () => {
fixture.detectChanges();
const expectedText = compiled.innerHTML;
expect(expectedText).toEqual('lord');
});
});
const getSomeServiceMock = {
getSomeData() {
return Observable.of({title: 'lord'});
}
};
答案 0 :(得分:0)
如果函数预期是异步的,则必须使用async
或fakeAsync
Angular helper将测试块中的回调函数包装起来。
getSomeServiceMock
使用Observable.of
并且同步。这就是async
是可选的原因。
如果此测试套件中涉及的组件不包含异步加载的组件,async
中的beforeEach
也是可选的。
根据经验,所有测试块都可以用fakeAsync
包裹。它比async
快,并且会告诉您它是否不合适(当块中发生真正的异步操作时)。
答案 1 :(得分:0)
我假设在组件的ngOnInit生命周期钩子中调用'getSomeData'。如果是这样,您在创建组件时已经使用了您正在使用的模拟响应。