我正在运行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
策略吗?
答案 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', ( ) => {
我现在将网格设置为同时测试网格形式,以便在进行更改时看到错误。