【问题标题】:Chrome and Mocha Global LeaksChrome 和 Mocha 全球泄漏
【发布时间】:2012-12-16 05:13:43
【问题描述】:

我有以下非常简单的摩卡/柴测试:

describe('main tests', function () {
  var expect = chai.expect, something = null;

  before(function () {
    something = 0;
  });

  it('should equal 0', function () {
    expect(something).to.equal(0);
  });
});

这在 chrome 中失败,输出如下:

错误:检测到全局泄漏:css、cssFile、cssRule

在 Firefox 和 Safari 中都可以顺利通过。

Google 自己的 Screen Capture 扩展定义了另一个全局变量。禁用该扩展后,Mocha 仅抱怨 csscssFilecssRule 是全局泄漏。

我检查了这些变量并没有在 Safari 或 Firefox 中定义,因此显然 Chrome 或我的 Chrome 扩展程序之一中的某些东西正在定义这三个变量。有没有办法找出哪个扩展定义了这些变量,而不是按顺序禁用和重新启用所有这些变量?

【问题讨论】:

    标签: google-chrome google-chrome-extension mocha.js chai


    【解决方案1】:

    解决您的问题的最佳方法不是一些 JavaScript sn-p,而是您安装的扩展程序的源代码。

    1. 访问您的Chrome profileExtensions 子目录(位置如下)。
    2. 使用工具递归搜索术语。
      例如,使用grep 命令:grep -r 'cssFile'(适用于 Linux、Mac 甚至 Windows)。

    您个人资料的 Chrome 扩展程序的默认位置

    Windows XP:
      Chrome  : %AppData%\..\Local Settings\Application Data\Google\Chrome\User Data\Default\Extensions\
      Chromium: %AppData%\..\Local Settings\Application Data\Chromium\User Data\Default\Extensions\
    
    Windows Vista/7/8:
      Chrome  : %LocalAppData%\Google\Chrome\User Data\Default\Extensions\
      Chromium: %LocalAppData%\Chromium\User Data\Default\Extensions\
    
    Linux:
      Chrome  : ~/.config/google-chrome/Default/Extensions/
      Chromium: ~/.config/chromium/Default/Extensions/
    
    Mac OS X:
      Chrome  : ~/Library/Application Support/Google/Chrome/Default/Extensions/
      Chromium: ~/Library/Application Support/Chromium/Default/Extensions/
    

    【讨论】:

      【解决方案2】:

      好吧,我刚刚做了禁用所有扩展的事情。 Chrome Sniffer 似乎是罪魁祸首。具体在以下代码中(detector.js):

      for (t in cssClasses) {
          // snipped for brevity
          for(css in cssClasses[t]) {
              // snipped for brevity
              for(cssFile in document.styleSheets) {
                  for(cssRule in document.styleSheets[cssFile].cssRules) {
                      // snipped for brevity
                  }
              }
          }
      }
      

      这会将tcsscssFilecssRule 泄漏到全局范围内。看起来我不是第一个注意到这一点的人:https://github.com/nqbao/chromesniffer/pull/51

      如果有人想回答我如何避免手动过程,我会接受你的回答。

      【讨论】:

        猜你喜欢
        • 2012-01-11
        • 2016-04-03
        • 2012-08-19
        • 2015-11-23
        • 2021-02-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多