Reactjs navigator.platform在使用Brace运行Mocha测试时未定义
我试图在Mocha中对React组件运行测试,但我一直遇到这个错误:Reactjs navigator.platform在使用Brace运行Mocha测试时未定义,reactjs,mocha.js,Reactjs,Mocha.js,我试图在Mocha中对React组件运行测试,但我一直遇到这个错误: var os = (navigator.platform.match(/mac|win|linux/i) || ["other])[0].toLowerCase(); TypeError: Cannot read property 'match' of undefined 我理解这个错误意味着模块无法确定代码运行在哪个平台上。然而,这个错误是从node\u modules/brace/index.js抛出的,所以这不是我自
var os = (navigator.platform.match(/mac|win|linux/i) || ["other])[0].toLowerCase();
TypeError: Cannot read property 'match' of undefined
我理解这个错误意味着模块无法确定代码运行在哪个平台上。然而,这个错误是从node\u modules/brace/index.js
抛出的,所以这不是我自己写的东西。有没有办法让Mocha
忽略这一点并继续测试
这是我的包.json
:
{
"name": "project",
"version": "0.2.0",
"description": "project",
"scripts": {
"clean:build": "node ./bin/clean.js createdir",
"build:html": "node ./bin/buildHtml.js",
"deployProduction": "node ./bin/deployProduction.js",
"start": "webpack-dev-server --config ./config/webpack.config.dev.js --hot --in line --progress",
"serve": "npm run deployProduction&& supervisor --watch ./production-copy src/js/server",
"prebuild": "npm run clean:build",
"postbuild": "node ./bin/postBuild.js",
"rebuild-win": "set BUILD_TYPE=preview& npm run prebuild & npm run build-win & npm run serve",
"build": "set BUILD_TYPE=final& npm run prebuild & npm run build-win",
"deploy": "npm run build & npm run serve",
"build-win": "set NODE_ENV=production & npm run element-build & npm run build-doc & npm run build:html & webpack -p --config ./config/webpack.config.prod.js --json > webpack.log.json & npm run postbuild",
"lint": "eslint config src/js/**/*.js",
"jscs": "jscs src/js/",
"test": "mocha --compilers js:babel-core/register --require ./test/unit/dom.js --recursive ./test/*.spec.js ",
"test:watch": "npm run test -- --watch",
"element-init": "node node_modules/element-theme/bin/element-theme -i src/js/core/ui/element-theme.css",
"element-build": "node node_modules/element-theme/bin/element-theme -c src/js/core/ui/element-theme.css -o src/js/core/ui/element-theme ",
"build-doc": "node bin/buildDoc.js "
},
"repository": {
"type": "git",
"url": "<our repository>"
},
"license": "MIT",
"bugs": {
"url": "<our url>"
},
"homepage": "<our homepage>",
"dependencies": {
"autoprefixer": "^6.3.6",
"axios": "^0.11.1",
"babel-standalone": "^6.10.3",
"bluebird": "^3.4.0",
"brace": "^0.8.0",
"browserify": "^13.0.1",
"classnames": "2.2.3",
"cls-bluebird": "^1.0.1",
"codemirror": "^5.16.0",
"continuation-local-storage": "^3.1.7",
"dateformat": "^1.0.12",
"diff": "^3.0.1",
"element-theme": "^0.4.0",
"element-ui": "^1.1.5",
"express-history-api-fallback": "^2.0.0",
"filedrop": "^2.0.0",
"fs-extra": "^0.30.0",
"history": "^2.0.2",
"humps": "^1.0.0",
"isomorphic-fetch": "^2.2.1",
"jszip": "^3.0.0",
"jszip-utils": "0.0.2",
"lodash": "^4.11.1",
"material-ui": "^0.16.2",
"materialize-css": "^0.97.6",
"normalizr": "^1.0.0",
"raven-js": "^3.9.1",
"react": "^15.4.2",
"react-ace": "^4.1.4",
"react-dom": "^15.4.2",
"react-redux": "^5.0.2",
"react-router": "^3.0.2",
"react-router-redux": "^4.0.8",
"react-tap-event-plugin": "^2.0.1",
"redux": "^3.4.0",
"redux-logger": "^2.6.1",
"redux-saga": "^0.9.5",
"request": "^2.72.0",
"request-promise": "^3.0.0",
"save-as": "^0.1.7",
"showdown": "^1.4.2",
"three": "^0.79.0",
"vue": "^2.0.5",
"vue-loader": "^9.8.1",
"vue-router": "^2.0.1",
"vue-slider-component": "^2.0.4",
"walk": "^2.3.9"
},
"devDependencies": {
"babel-core": "^6.7.6",
"babel-eslint": "^6.1.0",
"babel-loader": "^6.0.2",
"babel-plugin-react-transform": "^2.0.2",
"babel-polyfill": "^6.6.1",
"babel-preset-airbnb": "^2.2.3",
"babel-preset-es2015": "^6.6.0",
"babel-preset-react": "^6.5.0",
"babel-preset-stage-2": "^6.5.0",
"babel-register": "^6.7.2",
"chai": "^3.5.0",
"chai-jquery": "2.0.0",
"cheerio": "^0.22.0",
"colors": "1.1.2",
"concurrently": "^2.0.0",
"copy-webpack-plugin": "2.1.1",
"css-loader": "0.23.1",
"element-theme-default": "^1.1.5",
"enzyme": "^2.7.1",
"eslint": "^2.13.1",
"eslint-config-airbnb": "^9.0.1",
"eslint-plugin-react": "^5.2.2",
"express": "^4.13.4",
"extract-text-webpack-plugin": "1.0.1",
"file-loader": "0.8.5",
"jquery": "2.2.3",
"jscs": "3.0.3",
"jsdoc-to-markdown": "^2.0.0",
"jsdom": "^9.11.0",
"mocha": "^3.2.0",
"ncp": "^2.0.0",
"node-sass": "3.7.0",
"postcss-loader": "0.8.2",
"react-addons-test-utils": "^15.4.2",
"react-hot-loader": "^1.3.1",
"react-transform-hmr": "^1.0.4",
"redux-devtools": "^3.3.1",
"redux-devtools-dock-monitor": "^1.1.1",
"redux-devtools-log-monitor": "^1.0.11",
"remotedev": "^0.1.2",
"rimraf": "^2.5.2",
"sass-loader": "3.2.0",
"style-loader": "0.13.1",
"url-loader": "0.5.7",
"webpack": "^1.13.0",
"webpack-dev-middleware": "^1.6.1",
"webpack-dev-server": "1.14.1",
"webpack-hot-middleware": "^2.10.0"
}
{
“名称”:“项目”,
“版本”:“0.2.0”,
“说明”:“项目”,
“脚本”:{
“clean:build”:“node./bin/clean.js createdir”,
“build:html”:“node./bin/buildHtml.js”,
“deployProduction”:“node./bin/deployProduction.js”,
“开始”:“webpack dev server--config./config/webpack.config.dev.js--hot--in-line--progress”,
“服务”:“npm运行部署生产和主管--监视/生产副本src/js/server”,
“预构建”:“npm运行清理:构建”,
“postbuild”:“node./bin/postbuild.js”,
“重建成功”:“设置构建类型=预览和npm运行预构建和npm运行构建成功和npm运行服务”,
“构建”:“设置构建类型=最终和npm运行预构建和npm运行构建赢”,
“部署”:“npm运行构建和npm运行服务”,
“构建成功”:“设置节点_ENV=production&npm run元素构建&npm run构建文档&npm run构建:html&webpack-p--config./config/webpack.config.prod.js--json>webpack.log.json&npm run postbuild”,
“lint”:“eslint config src/js/***.js”,
“jscs”:“jscs src/js/”,
“test”:“mocha——编译器js:babel core/register——require./test/unit/dom.js——recursive./test/*.spec.js”,
“测试:监视”:“npm运行测试----监视”,
“element init”:“node node_modules/element theme/bin/element theme-i src/js/core/ui/element theme.css”,
“元素构建”:“node node_modules/element-theme/bin/element-theme-c src/js/core/ui/element-theme.css-o src/js/core/ui/element-theme”,
“构建文档”:“节点bin/buildDoc.js”
},
“存储库”:{
“类型”:“git”,
“url”:”
},
“许可证”:“麻省理工学院”,
“臭虫”:{
“url”:”
},
“主页”:“,
“依赖项”:{
“自动刷新器”:“^6.3.6”,
“axios”:“^0.11.1”,
“巴别塔单机版”:“^6.10.3”,
“蓝鸟”:“^3.4.0”,
“大括号”:“^0.8.0”,
“浏览化”:“^13.0.1”,
“类名”:“2.2.3”,
“cls蓝鸟”:“^1.0.1”,
“codemirror”:“^5.16.0”,
“连续本地存储”:“^3.1.7”,
“日期格式”:“^1.0.12”,
“差异”:“^3.0.1”,
“元素主题”:“^0.4.0”,
“元素ui”:“^1.1.5”,
“快速历史api回退”:“^2.0.0”,
“文件删除”:“^2.0.0”,
“fs额外”:“^0.30.0”,
“history”:“^2.0.2”,
“驼峰”:“^1.0.0”,
“同构提取”:“^2.2.1”,
“jszip”:“^3.0.0”,
“jszip utils”:“0.0.2”,
“lodash”:“^4.11.1”,
“材质界面”:“^0.16.2”,
“物化css”:“^0.97.6”,
“normalizer”:“^1.0.0”,
“raven js”:“^3.9.1”,
“反应”:“^15.4.2”,
“反应ace”:“^4.1.4”,
“react dom”:“^15.4.2”,
“react redux”:“^5.0.2”,
“反应路由器”:“^3.0.2”,
“react router redux”:“^4.0.8”,
“反应点击事件插件”:“^2.0.1”,
“redux”:“^3.4.0”,
“redux记录器”:“^2.6.1”,
“重演传奇”:“^0.9.5”,
“请求”:“^2.72.0”,
“请求承诺”:“^3.0.0”,
“另存为”:“^0.1.7”,
“决战”:“^1.4.2”,
“三个”:“^0.79.0”,
“vue”:“^2.0.5”,
“vue加载程序”:“^9.8.1”,
“vue路由器”:“^2.0.1”,
“vue滑块组件”:“^2.0.4”,
“步行”:“^2.3.9”
},
“依赖性”:{
“巴别塔核心”:“^6.7.6”,
“babel eslint”:“^6.1.0”,
“巴别塔加载器”:“^6.0.2”,
“巴别塔插件反应转换”:“^2.0.2”,
“巴别塔polyfill”:“^6.6.1”,
“巴别塔预设airbnb”:“^2.2.3”,
“babel-preset-es2015”:“^6.6.0”,
“巴别塔预设反应”:“^6.5.0”,
“babel-preset-stage-2”:“^6.5.0”,
“巴别塔寄存器”:“^6.7.2”,
“柴”:“^3.5.0”,
“柴jquery”:“2.0.0”,
“干杯”:“^0.22.0”,
“颜色”:“1.1.2”,
“同时”:“^2.0.0”,
“复制网页包插件”:“2.1.1”,
“css加载器”:“0.23.1”,
“元素主题默认值”:“^1.1.5”,
“酶”:“^2.7.1”,
“eslint”:“^2.13.1”,
“eslint配置airbnb”:“^9.0.1”,
“eslint插件反应”:“^5.2.2”,
“快车”:“^4.13.4”,
“提取文本网页包插件”:“1.0.1”,
“文件加载器”:“0.8.5”,
“jquery”:“2.2.3”,
“jscs”:“3.0.3”,
“jsdoc降价”:“^2.0.0”,
“jsdom”:“^9.11.0”,
“摩卡”:“^3.2.0”,
“ncp”:“^2.0.0”,
“节点sass”:“3.7.0”,
“邮政编码加载器”:“0.8.2”,
“react加载项测试实用程序”:“^15.4.2”,
“反应热加载程序”:“^1.3.1”,
“反应转换hmr”:“^1.0.4”,
“redux开发工具”:“^3.3.1”,
“redux devtools dock monitor”:“^1.1.1”,
“redux devtools日志监视器”:“^1.0.11”,
“remotedev”:“^0.1.2”,
“rimraf”:“^2.5.2”,
“sass加载器”:“3.2.0”,
“样式加载器”:“0.13.1”,
“url加载器”:“0.5.7”,
“网页包”:“^1.13.0”,
“网页包开发中间件”:“^1.6.1”,
“网页包开发服务器”:“1.14.1”,
“网页包热中间件”:“^2.10.0”
}
发现了问题:我正在重新创建导航器
变量,却忘了将平台
成员放入其中。要解决这个问题,正如OP提到的,您需要在测试设置中设置导航器
,并包括两个属性:平台
和应用程序名
以下是测试设置脚本应该包含的内容,以便正确设置:
var exposedProperties = ['window', 'navigator', 'document'];
global.window = document.defaultView;
global.navigator = {
userAgent: 'node.js',
platform: 'windows', // This can be set to mac, windows, or linux
appName: "Microsoft Internet Explorer", // Be sure to define this as well
};
您是如何将
平台
成员放在导航器
中的?可能有点晚了,但请参阅我的答案,了解如何设置它