我使用了一个库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`
有更好的方法吗?
答案 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;
})();