Reactjs navigator.platform在使用Brace运行Mocha测试时未定义

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抛出的,所以这不是我自

我试图在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
抛出的,所以这不是我自己写的东西。有没有办法让
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
};

您是如何将
平台
成员放在
导航器
中的?可能有点晚了,但请参阅我的答案,了解如何设置它