如何在CoffeeScript中指定需要引用的静态类属性?

时间:2013-12-12 17:40:38

标签: coffeescript

我使用了一个库proxyquire,它包含Node的require方法以允许Mock对象注入。其中一个功能是它使用原始扩展模拟对象,因此填充了缺少的属性。您可以通过在名为@noCallThru的模拟对象上设置属性来关闭它,如下所示:

MockObj =
  stubFunc: ->
  "@noCallThru": true

proxyquire "path/to/module",
  "path/to/mocked_module": MockObj

某些模块是构造函数(类),因此要模拟它们,您需要使用CoffeeScript的类系统。但是,在返回的对象(在本例中为类)上检查@noCallThru的使用,因为它不是实例,所以不会使用原型。 @noCallThru必须是该类的静态属性。

如何为需要报价的CoffeeScript类定义静态属性?我能想到的最好的方法就是像这样注入严厉的JavaScript:

class MockClass
  stubFunc: ->
  `MockClass['@noCallThru'] = true`

有更好的方法吗?

1 个答案:

答案 0 :(得分:3)

您不需要将其作为JavaScript注入。你可以这样做:

class MockClass
  stubFunc: ->
  @['@noCallThru'] = true

(因为在类定义中,this@指的是类/构造函数本身)

以上代码编译为:

var MockClass;

MockClass = (function() {
  MockClass.name = 'MockClass';
  function MockClass() {}
  MockClass.prototype.stubFunc = function() {};
  MockClass['@noCallThru'] = true;
  return MockClass;
})();