在 Javascript 中,污染全局命名空间通常被认为是一件坏事。这就是 Coffeescript 将所有 Javascript 包装在一个(function() {}).call(this);
包装器中的原因。
但是,我已经开始为我的 Coffeescript 代码编写 QUnit 测试,而 QUnit 抱怨它找不到我的函数。
1. Died on test #1: getGoodNamePart is not defined
getGoodNamePart is not defined at Object.<anonymous> (file:///Users/kevin/Documents/docs/code/chrome/tests.js:2:10) at Object.run
我想在不污染全局命名空间的情况下测试变量。有什么好方法可以做到这一点?
这是我要测试的生成的 Javascript:
(function() {
getGoodNamePart = function(str) {
if (str.charAt(0) === '"') {
str.replace(/" <[^>]+>$"/g, "");
str.replace(/"/g, "");
return str;
} else if (str.charAt(0) === '<') {
str.replace(/<|>/g, "");
return str;
} else {
return str;
}
};
}).call(this);
我的 test.js 文件是:
test('getGoodNamePart()', function() {
equals(getGoodNamePart("\"Kev Burke\" <kev@inburke.com>"), "Kev Burke", "\"name\" <email> works");
equals(getGoodNamePart("", "", "empty string works"));
equals(getGoodNamePart("kev@inburke.com", "kev@inburke.com", "raw email works"));
return equals(getGoodNamePart("<kev@inburke.com>", "kev@inburke.com", "email inside carets -> carets get stripped"));
});
谢谢,凯文