JSDom 业力角度设置

Posted

技术标签:

【中文标题】JSDom 业力角度设置【英文标题】:JSDom karma angular setup 【发布时间】:2020-08-06 18:17:02 【问题描述】:

我希望能够使用 JSDOM 作为浏览器,以便使用 karma 以角度运行 jasmine 测试。

我使用以下命令安装了 jsdomkarma-jsdom-launcher

npm install jsdom --save-dev
npm install karma-jsdom-launcher --save-dev

安装软件包后,我将插件添加到 karma.conf.js

require('karma-jsdom-launcher')

但是,当我使用命令 ng test --browsers=jsdom 运行测试时,我得到了

10% building 4/4 modules 0 active23 04 2020 13:09:45.095:INFO [launcher]: Starting browser jsdom
23 04 2020 13:09:57.422:WARN [karma]: No captured browser, open http://localhost:9877/
Error: Uncaught [TypeError: Cannot read property 'origin' of undefined]

以下是我正在使用的版本

Node version - 12
Angular version - 9

"jsdom": "^16.2.2",
"karma": "~4.3.0",
"karma-chrome-launcher": "~3.1.0",
"karma-coverage-istanbul-reporter": "~2.1.0",
"karma-jasmine": "~2.0.1",
"karma-jasmine-html-reporter": "^1.4.2",
"karma-jsdom-launcher": "^8.0.2",

我错过了什么吗?如何使用 JSDo 而不是 chrome 浏览器运行测试?

【问题讨论】:

您可以尝试从karma.conf.js 配置浏览器吗?我的意思是添加config.set(browsers: ['jsdom'],); 部分。在此运行之后只需 ng test 我也试过了,还是不行 【参考方案1】:

我能够使用您发布的版本重现上述问题。

"jsdom": "^16.2.2", 
"karma-jsdom-launcher": "^8.0.2",
"karma": "~4.3.0" 
"karma"-jasmine: "~2.0.1" 

我遇到了同样的错误:

10% building 4/4 modules 0 active23 04 2020 13:09:45.095:INFO [launcher]: Starting browser jsdom
23 04 2020 13:09:57.422:WARN [karma]: No captured browser, open http://localhost:9877/
Error: Uncaught [TypeError: Cannot read property 'origin' of undefined]

karma 更新为~5.0.0karma-jasmine 更新为~3.0.1 后,Error: Uncaught [TypeError: Cannot read property 'origin' of undefined] 错误消失了,但测试仍未启动,当应启动 Jasmine 测试时控制台挂起。

karma-jsdom-launcher 的常见问题解答中有一个已知问题documented here。它说,如果使用源地图,业力启动器可能会挂起。如果我们尝试以这种方式添加"sourceMap: false" 来禁用angular.json 中的源映射:

"test": 
  "builder": "@angular-devkit/build-angular:karma",
  "options": 
    "main": "src/test.ts",
    "polyfills": "src/polyfills.ts",
    "tsConfig": "tsconfig.spec.json",
    "karmaConfig": "karma.conf.js",
    "sourceMap": false,
    "assets": [
      "src/favicon.ico",
      "src/assets"
    ],
    "styles": [
      "src/styles.scss"
    ],
    "scripts": []
  
,

确实有效。我为此创建了一个演示,it can be checked here。

但是,必须禁用源映射并不酷。这意味着您将无法在测试中使用断点,这可能是一个不便的限制。

如果源图的限制很痛苦,那么值得考虑使用 Headless Chrome。 Headless Chrome 使用教程can be found here.

【讨论】:

所以我将 karma 和 karma-jasmine 更新到提到的版本并再次运行它。这次我克服了原始错误,但现在又遇到了另一个错误。未实现:HTMLCanvasElement.prototype.getContext(不安装canvas npm包) 好的,我找到了 HTMLCanvasElement 问题。这是因为 pollyfills.ts 中的包 web-animations.js。我添加了该行并在您的项目中安装了该软件包并得到了同样的错误。你知道怎么解决吗? 我看了看,但似乎走得太远了。为什么需要 JSDOM 作为测试的浏览器? 在没有浏览器的 CI 服务器上运行它。没有 chrome/headless chrome 或 phantom js 等,所以唯一的选择是 jsdom。它可以工作,但对于网络动画,它现在会抛出错误。 任何运气如何解决这个问题?

以上是关于JSDom 业力角度设置的主要内容,如果未能解决你的问题,请参考以下文章

包括put方法的角度服务的测试用例

jhipster:使用外部模板在组件上运行业力测试

CAD阵列角度怎么设置?CAD阵列角度设置步骤

Android 旋转动画怎么动态设置旋转角度,用

js设置图片随机旋转角度

使用角度 5 设置角度材料 datePicker 的默认值