在Angular中运行Jasmine和Karma时收到CORS错误

时间:2019-01-08 17:15:39

标签: cors karma-jasmine

我正在运行specs,并在浏览器窗口中注意到以下错误

zone.js:2990 Access to XMLHttpRequest at 'ng:///DynamicTestModule/NewPracticeQuestionComponent_Host.ngfactory.js' from origin 'http://localhost:9876' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.

我想我的应用程序中某处已发送了一些消息,这导致了CORS问题。我假设Karma使用的Web服务器正在阻止该请求。

我可以配置Karma来禁用CORS策略吗?

3 个答案:

答案 0 :(得分:1)

使用--sourcemaps=false运行测试,您将获得正确的错误消息。

这是这里的问题:https://github.com/angular/angular-cli/issues/7296

此外,速记:

ng test -sm=false

从6号角开始,命令为:

ng test --source-map=false

答案 1 :(得分:0)

除非您实际上跨域致电,否则我认为这不是CORS问题。

我遇到了类似的问题,即组件在代码中设置了返回类似错误的日期。您可能未在测试中设置一些必需的值,或者未在正确的位置调用fixture.detectChanges()。

在运行npm test(或ng test)时,尝试将--source-map标志设置为false,实际上可能会得到更有意义的错误。

除了错误消息外,还发布受影响的代码通常是个好主意。

干杯, 阿尔贝托

答案 2 :(得分:0)

我得到了一个失败的完整测试装置。查看控制台日志,它包含以下错误消息:

<块引用>

在 'ng:///CompanyVehicleGridComponent.js' 访问 XMLHttpRequest 来自 origin 'http://localhost:9876' 已被 CORS 策略阻止: 仅协议方案支持跨源请求:http、 数据、chrome、chrome 扩展、chrome 不受信任、https。

我在 Angular 11 应用程序中使用 PrimeNG 控件。我正在使用显示和删除行的 PrimeNG 网格。然后在网格中,单击创建和编辑按钮将弹出一个 PrimeNG 模式对话框。我发现这种组件组合是一个有趣的测试挑战。下面说明了网格组件:

<!-- File: company-vehicle-grid.component.html -->
<div *ngIf='companyvehicles !== undefined'>
    <p-table id='companyvehicles-grid' [value]='companyvehicles'
        [totalRecords]='totalRecords' dataKey='VehicleId'
        [rows]='5' [paginator]='true' [rowsPerPageOptions]='[5,10,50]'>

        ...

    </p-table>
</div>
<!-- modal edit windows -->
<app-company-vehicle-detail-window [companyvehicle]='windowCompanyVehicleInput'
    (closeWin)='closeWin($event)'></app-company-vehicle-detail-window>
...
<!-- End of company-vehicle.grid.component.html -->

这个错误出现在网格测试结构中。运行以下测试指令:

ng test --source-map=false

没有帮助。我删除了 company-vehicle-detail-window 并且错误消失了,表明问题是由于模态对话框窗口中的更改造成的。在实现PrimeNG模态对话框的过程中,我修改了一些导致错误的服务调用,需要添加到网格测试的mock spy服务中,这样模态对话框才能通过构造函数和ngOnInit。

此外,我计划更改的一件事是,当我开发详细信息窗口时,我将描述设置为限制测试以仅测试一种结构,如下所示:

fdescribe( 'CompanyVehicleDetailWindowComponent', ( ) => {

我现在将网格设置为同时测试网格形式,以便在进行更改时看到错误。