我希望能够使用JSDOM作为浏览器在angular中使用karma运行jasmine测试。
我安装了 jsdom 和 缘分-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",
我错过了什么吗?我如何使用JSDom而不是chrome浏览器来运行我的测试?
我能够用你发布的版本重现上述问题。
使用
"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.0
和 karma-jasmine
到 ~3.0.1
的 Error: Uncaught [TypeError: Cannot read property 'origin' of undefined]
错误消失了,但是测试还是没有启动,当应该启动Jasmine测试的时候,控制台却挂了。
茉莉花测试的FAQ中 karma-jsdom-launcher
有问题 载于此. 它说,如果使用了源码图,因果报应启动器会挂起。如果我们尝试在程序的 angular.json
加上 "sourceMap: false"
这种方式。
"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": []
}
},
真的有用 我为此制作了一个演示。可以在这里查看.
然而,它并不酷,因为源码图必须被禁用。这意味着你将无法在测试中使用断点,这可能是一个不方便的限制。
如果对源码图的限制感到痛苦,那么值得考虑使用无头浏览器。关于使用无头浏览器的教程 可以在这里找到.