以下是一个示例代码,演示了如何在Angular中测试通过父组件传递的异步可观察对象:
import { Component, OnInit } from '@angular/core';
import { Observable, of } from 'rxjs';
@Component({
selector: 'app-parent',
template: `
`
})
export class ParentComponent implements OnInit {
data$: Observable;
ngOnInit() {
// 模拟异步数据
this.data$ = of('Hello, World!').pipe(
delay(1000)
);
}
}
import { Component, Input } from '@angular/core';
@Component({
selector: 'app-child',
template: '{{ data }}'
})
export class ChildComponent {
@Input() data: string;
}
import { ComponentFixture, TestBed, async } from '@angular/core/testing';
import { ParentComponent } from './parent.component';
import { ChildComponent } from './child.component';
import { of } from 'rxjs';
describe('ParentComponent', () => {
let component: ParentComponent;
let fixture: ComponentFixture;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ParentComponent, ChildComponent]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(ParentComponent);
component = fixture.componentInstance;
});
it('should pass data to child component', () => {
const testData = 'Test Data';
// 使用of函数创建一个Observable对象,模拟父组件传递的异步可观察对象
spyOn(component.data$, 'subscribe').and.returnValue(of(testData));
fixture.detectChanges();
const childComponent = fixture.debugElement.nativeElement.querySelector('app-child');
expect(childComponent.textContent).toBe(testData);
});
});
在这个示例中,我们使用of
函数创建一个立即发出值的Observable对象来模拟异步可观察对象。然后,我们通过spyOn
函数来模拟data$
的订阅,并返回一个虚拟的Observable对象。最后,我们通过查询子组件的元素来验证数据是否正确传递给了子组件。
请注意,我们使用了async
函数来处理异步操作,并使用detectChanges
方法来触发Angular的变更检测。
上一篇:Angular测试随机失败