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

问题描述 投票:0回答:1

我正在测试一个标签的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);
});

测试通过,但我在控制台中收到以下错误。

来自“http://localhost:9876”的'ng:///DynamicTestModule/LearnerEventsActivitiesComponent.ngfactory.js'对XMLHttpRequest的访问已被CORS策略阻止:仅对协议方案支持跨源请求:http,data,chrome,chrome-extension, HTTPS。

标签'showRegionAndVisit()'正在调用的函数正在调用setTimeout(),当我对它进行注释时,我不再在控制台中得到错误,这就是罪魁祸首。

有没有办法在测试中为组件提供模拟setTimeout?

干杯

angular jasmine click settimeout
1个回答
1
投票

我找到了答案。我补充道

jasmine.clock().install(); 

在我的测试开始时,这将使用mock函数替换setTimeout

© www.soinside.com 2019 - 2024. All rights reserved.