0

我有以下非常简单的Mocha / Chai 测试:

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 仅抱怨css,cssFilecssRule是全局泄漏。

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

4

2 回答 2

1

您的问题的最佳解决方案不是一些 JavaScript 片段,而是您安装的扩展程序的源代码。

  1. 访问您的Chrome 个人资料Extensions的子目录(以下位置)。
  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/
于 2012-12-15T21:13:43.963 回答
0

Well, I just did the disable all extensions thing. Chrome Sniffer appears to be the culprit. Specifically in the following code (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
            }
        }
    }
}

That will leak t, css, cssFile, and cssRule into global scope. Looks like I'm not the first to notice this: https://github.com/nqbao/chromesniffer/pull/51

If anybody wants to answer with how I could have avoided the manual process I will accept your answer.

于 2012-12-15T21:10:38.183 回答