首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeError:无法读取未定义的属性“导航器”

TypeError:无法读取未定义的属性“导航器”
EN

Stack Overflow用户
提问于 2022-04-07 07:10:26
回答 1查看 944关注 0票数 0

当我从业力开始在摩卡上运行单元测试时,我的单元测试用例开始失败,之前我们使用业力和浏览器运行测试用例,但是它运行得很好,

代码语言:javascript
复制
  1) common/browser-detection
       returns the mock object when there is no userAgent:
     TypeError: Cannot read property 'navigator' of undefined
      at Context.<anonymous> (packages/node_modules/@webex/plugin-meetings/test/unit/spec/common/browser-detection.js:115:41)
      at processImmediate (internal/timers.js:464:21)

  2) plugin-meetings
       meeting index
         Public Api Contract
           #addMedia
             should reject promise if user already in left state:
     AssertionError: expected [ReferenceError: navigator is not defined] to be an instance of UserNotJoinedError
      at /Users/nswarnka/Documents/Neeraj/Projects/upstream/webex-js-sdk/packages/node_modules/@webex/plugin-meetings/test/unit/spec/meeting/index.js:763:20

Package.json

代码语言:javascript
复制
"test": "node ./tooling/index.js test",

 "circleci:local": "circleci local execute -c .circleci/github.config.yml",

测试文件-

对于这里的导航器失败,TypeError:无法读取未定义的属性“导航器”

代码语言:javascript
复制
  it('returns the mock object when there is no userAgent', () => {
    Object.defineProperty(global.window.navigator, 'userAgent', {
      get: () => undefined,
      configurable: true
    });

ReferenceError:未定义导航器

代码语言:javascript
复制
/**
 * proxy to browser navigator.mediaDevices.enumerateDevices()
 * @returns {Promise}
 */
Media.getDevices = () => {
  if (navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {
    return navigator.mediaDevices.enumerateDevices();
  }

  return Promise.reject(new MediaError('enumerateDevices not supported.'));
};
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-07 12:00:30

访问global.window.navigator是一个错误,无论是在浏览器(其中没有定义global )还是在Node.js (其中没有全局window对象,也没有navigator)。

如果要在浏览器中运行该测试,您可以重新定义userAgent on navigator (或等效于window.navigator),即

代码语言:javascript
复制
Object.defineProperty(navigator, 'userAgent', {
  get: () => undefined,
  configurable: true
});

但是,如果您在没有DOM仿真设置的情况下在Node.js中运行该测试,您将遇到一个错误,因为navigator是未定义的。当然,您可以在模拟navigator之前模拟userAgent,但是为了使测试通过,您还需要模拟navigator.mediaDevicesnavigator.mediaDevices.enumerateDevices,最后只测试模拟代码本身。

结论:使用DOM仿真(JSDom干杯)或在真正的浏览器中使用因果报应木偶师运行您的测试。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71777757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档