karma
autobahn
vue-cli
unit
vue-cli 项目中添加了 autobahn
这个库,npm run dev
正常,但是 npm run unit
执行单元测试的时候报了一个 unmask
错误,错误信息如下
gyw@gyw:~/sda1/code/exercise/vue-cli-test-karma$ npm run unit > vue-cli-test-karma@1.0.0 unit /home/gyw/sda1/code/exercise/vue-cli-test-karma > cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run 27 04 2018 10:33:03.405:INFO [karma]: Karma v1.7.1 server started at http://0.0.0.0:9876/ 27 04 2018 10:33:03.406:INFO [launcher]: Launching browser PhantomJS with unlimited concurrency 27 04 2018 10:33:03.414:INFO [launcher]: Starting browser PhantomJS 27 04 2018 10:33:03.523:ERROR [karma]: TypeError: Cannot read property 'unmask' of undefined at Receiver.unmask (/home/gyw/sda1/code/exercise/vue-cli-test-karma/node_modules/engine.io/node_modules/ws/lib/Receiver.js:306:47) at Receiver.finish (/home/gyw/sda1/code/exercise/vue-cli-test-karma/node_modules/engine.io/node_modules/ws/lib/Receiver.js:505:25) at Receiver.expectHandler (/home/gyw/sda1/code/exercise/vue-cli-test-karma/node_modules/engine.io/node_modules/ws/lib/Receiver.js:493:33) at Receiver.add (/home/gyw/sda1/code/exercise/vue-cli-test-karma/node_modules/engine.io/node_modules/ws/lib/Receiver.js:103:24) at Socket.realHandler (/home/gyw/sda1/code/exercise/vue-cli-test-karma/node_modules/engine.io/node_modules/ws/lib/WebSocket.js:825:20) at emitOne (events.js:116:13) at Socket.emit (events.js:211:7) at addChunk (_stream_readable.js:263:12) at readableAddChunk (_stream_readable.js:250:11) at Socket.Readable.push (_stream_readable.js:208:10) at TCP.onread (net.js:607:20) npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! vue-cli-test-karma@1.0.0 unit: `cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run` npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the vue-cli-test-karma@1.0.0 unit script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above. npm ERR! A complete log of this run can be found in: npm ERR! /home/gyw/.npm/_logs/2018-04-27T02_33_03_550Z-debug.log
####package.json
{ "scripts": { "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js", "start": "npm run dev", "unit": "cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run", "e2e": "node test/e2e/runner.js", "test": "npm run unit && npm run e2e", "lint": "eslint --ext .js,.vue src test/unit test/e2e/specs", "build": "node build/build.js", "server": "node build/server.js" }, "dependencies": { "vue": "^2.5.2", "vue-router": "^3.0.1" }, "devDependencies": { "autobahn": "^18.3.2", "autoprefixer": "^7.1.2", "babel-core": "^6.22.1", "babel-eslint": "^8.2.1", "babel-helper-vue-jsx-merge-props": "^2.0.3", "babel-loader": "^7.1.1", "babel-plugin-istanbul": "^4.1.1", "babel-plugin-syntax-jsx": "^6.18.0", "babel-plugin-transform-runtime": "^6.22.0", "babel-plugin-transform-vue-jsx": "^3.5.0", "babel-preset-env": "^1.3.2", "babel-preset-stage-2": "^6.22.0", "babel-register": "^6.22.0", "chai": "^4.1.2", "chalk": "^2.0.1", "chromedriver": "^2.27.2", "copy-webpack-plugin": "^4.0.1", "cross-env": "^5.0.1", "cross-spawn": "^5.0.1", "css-loader": "^0.28.0", "eslint": "^4.15.0", "eslint-config-standard": "^10.2.1", "eslint-friendly-formatter": "^3.0.0", "eslint-loader": "^1.7.1", "eslint-plugin-import": "^2.7.0", "eslint-plugin-node": "^5.2.0", "eslint-plugin-promise": "^3.4.0", "eslint-plugin-standard": "^3.0.1", "eslint-plugin-vue": "^4.0.0", "extract-text-webpack-plugin": "^3.0.0", "file-loader": "^1.1.4", "friendly-errors-webpack-plugin": "^1.6.1", "html-webpack-plugin": "^2.30.1", "inject-loader": "^3.0.0", "karma": "^2.0.2", "karma-coverage": "^1.1.1", "karma-mocha": "^1.3.0", "karma-phantomjs-launcher": "^1.0.4", "karma-phantomjs-shim": "^1.5.0", "karma-sinon-chai": "^1.3.4", "karma-sourcemap-loader": "^0.3.7", "karma-spec-reporter": "0.0.32", "karma-webpack": "^3.0.0", "mocha": "^5.1.1", "nightwatch": "^0.9.12", "node-notifier": "^5.1.2", "optimize-css-assets-webpack-plugin": "^3.2.0", "ora": "^1.2.0", "phantomjs-prebuilt": "^2.1.14", "portfinder": "^1.0.13", "postcss-import": "^11.0.0", "postcss-loader": "^2.0.8", "postcss-url": "^7.2.1", "rimraf": "^2.6.0", "selenium-server": "^3.0.1", "semver": "^5.3.0", "shelljs": "^0.7.6", "sinon": "^4.0.0", "sinon-chai": "^2.8.0", "uglifyjs-webpack-plugin": "^1.1.1", "url-loader": "^0.5.8", "vue-loader": "^13.3.0", "vue-style-loader": "^3.0.1", "vue-template-compiler": "^2.5.2", "webpack": "^3.6.0", "webpack-bundle-analyzer": "^2.9.0", "webpack-dev-server": "^2.9.1", "webpack-merge": "^4.1.0", "ws": "^5.1.1" }, "engines": { "node": ">= 6.0.0", "npm": ">= 3.0.0" }, "browserslist": [ "> 1%", "last 2 versions", "not ie <= 8" ] }
####解决方案:
更新 karma
mocha
相关的所有包到最新版就OK了
npm install karma@latest karma-coverage@latest karma-mocha@latest karma-phantomjs-launcher@latest karma-phantomjs-shim@latest karma-sinon-chai@latest karma-sourcemap-loader@latest karma-spec-reporter@latest karma-webpack@latest mocha@latest ws@latest -D
之前使用的一种解决方案,那时候服务器上用的 cnpm : 当时是 ws
版本是1.0,把 ws
依赖包更新到 2.0 以上版本,然后把 node_module
中的 ws@1
相关的文件删除就OK了