我最近一直在切换到 Coffeescript,我认为这是向前迈出的一步(并非总是如你所见)。我遇到的问题是咖啡脚本类:
class @ComparisonCollection extends Backbone.Collection
被编译成
(function() {
var ComparisonCollection, _ref,
__hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
ComparisonCollection = (function(_super) {
__extends(ComparisonCollection, _super);
function ComparisonCollection() {
_ref = ComparisonCollection.__super__.constructor.apply(this, arguments);
return _ref;
}
return ComparisonCollection;
})(Backbone.Collection);
}).call(this);
这意味着,除非我像这样在全局命名空间中定义整个类(注意 @ ),否则 Jasmine 无法对其进行测试:
class @ComparisonCollection extends Backbone.Collection
这会将对象 ComparissonCollection 附加到窗口对象(全局命名空间),其中:
- 似乎一开始就违背了咖啡脚本的封装
- 是一种使我的代码能够对其进行测试的解决方案
你有没有更好的建议如何在不把所有东西都变成window.something