我最近一直在转向Coffeescript,我认为这是向前迈出的一步(不像你看到的那样)。我遇到的问题是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
答案 0 :(得分:0)
一种流行的方法是使用浏览器的打包解决方案。我喜欢stitch的简单性。其他流行的替代品包括RequireJS,Browserify和Ender。
这需要以某种方式包装模块。在stitch和Browserify中,这与节点中的完全相同(例如,RequireJS使用的AMD模块略有不同)。
示例:强> 的
// collections/comparison.coffee
class ComparisonCollection extends Backbone.Collection
module.exports = ComparisonCollection
使用它(在您自己的应用程序中以及在茉莉花测试中):
ComparisonCollection = require 'collections/comparison'
的可替换地:强> 的
// collections.coffee
class exports.ComparisonCollection extends Backbone.Collection
使用它:
{ComparisonCollection} = require 'collections'
这也增加了使用jasmine-node进行无头测试的可能性,因此除了在浏览器中进行测试之外,您还可以在构建服务器等时轻松测试所有内容。