我正在尝试测试在元素可见时呈现背景图像的组件。我检测滚动调整大小事件的可见性,并减轻我从RxJS使用Request
的负载。然而,这是一个问题,因为单元测试失败了
失败:无法在异步区域测试中使用setInterval。
我知道这是一个问题,因为if (HttpContext.Current == null ||
HttpContext.Current.Request.Url.Host.IndexOf("www.izenda.com",StringComparison.CurrentCultureIgnoreCase) > -1)
return;
的异步性质,但我不确定如何阻止此/ mock debounceTime
进行测试。
这是组件
debounceTime
这是单元测试
debounceTime
答案 0 :(得分:0)
您可以使用TestScheduler交换debounceTime
使用的默认调度程序。然后,它将不再使用setInterval计划未来的值。我不是100%确定你的测试是否会在没有去抖动的情况下成功,否则你将不得不做一个真正的Rx测试,你让TestScheduler在虚拟时间运行,这样它就会达到所需的最终状态,好像你的去抖一样触发了IRL
答案 1 :(得分:0)
我遇到了同样的问题,使用茉莉花的“完成”有什么帮助。虽然我必须承认我不熟悉注入,但我不知道你正在运行什么版本的角度等等,我正在努力调整你的代码,以它对我有用的方式:
...
describe(`${collectionName} ListComponent`, () => {
let fixture;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [
RouterLinkMockModule,
],
declarations: [
ListComponent,
],
providers: [
Router //I think you have to do that here if you do not use the inject
]
});
});
it('should render 2 items in list', (done) => {
fixture = TestBed.createComponent(ListComponent);
fixture.componentInstance.data = data;
fixture.detectChanges();
const el = fixture.debugElement.nativeElement;
expect(el.querySelectorAll('.box').length).toBe(2);
done();
});
...
我不是100%确定这对你有用 - 我有另一种方法可以在名为'Page'的类中存储我需要的所有引用,就像在angular.io页面上建议进行测试一样。在那里我也称为创建组件,我认为这是“完成”应该涵盖的关键部分。 不确定这是否相关,但供参考:我使用角度2.3.1和业力1.2.0与jasmine-core 2.5.2