即使测试通过,组件中的Angular setTimeout()调用也会导致测试中的控制台错误

时间:2019-04-18 08:36:07

标签: angular jasmine click settimeout

我正在测试标记Angular 7中的点击动作

这是我组件中的标签标记

<div id="region-start" class="timeline-region">
    <div class="row">
      <div class="col-12 col-md-4">
        <a class="timeline-region-heading" [ngClass]="{'timeline-region-active':activeStart}" [routerLink]="" (click)="showRegionAndVisit(true, 'start', 0)">Start</a>
      </div>
    </div>
</div>

这是测试

it('should display a start date', () => {

    var startHeading = fixture.nativeElement.querySelector('#region-start a.timeline-region-heading');

    startHeading.click();  // This will display the start visit details box

    fixture.detectChanges();

    let visitDate = fixture.nativeElement.querySelector('#region-start .timeline-visit-content-desktop .visit-date');

    expect(visitDate.textContent).toContain(learnerStartDate);
});

测试通过,但是在控制台中出现以下错误。

  

CORS策略已阻止从来源“ http://localhost:9876”访问位于“ ng:///DynamicTestModule/LearnerEventsActivitiesComponent.ngfactory.js”的XMLHttpRequest:仅协议方案支持跨来源请求:http,数据,chrome,chrome扩展名,https。

标记“ showRegionAndVisit()”正在调用的函数正在调用setTimeout(),当我对此进行注释时,我不再在控制台中收到错误,因此是罪魁祸首。

是否可以为测试中的组件提供模拟setTimeout?

欢呼

1 个答案:

答案 0 :(得分:1)

我找到了答案。我添加了

jasmine.clock().install(); 

在测试开始时,它将setTimeout替换为模拟函数