使用require.exports = ClassConstructor进行proxyquire

时间:2016-11-18 12:56:55

标签: javascript node.js mocking proxyquire

如果我有一个导出单个类的模块,我如何使用proxyquire模拟/存根?

目前我有以下内容似乎有效,但相当冗长且无法正确使用proxyquire

一些-class.js

var SomeClass = function(){
  console.log("constructed SomeClass");
}
SomeClass.prototype.shout = function(){
  console.log("HELLO!");
}
module.exports = SomeClass;

我-module.js

var SomeClass = require('some-class');
module.exports.doSomething = function(){
  var a = new SomeClass();
  a.shout();
}

测试-MY-module.js

// :::: bit I'd like to avoid ::::::
var cls = require('some-class'); 
var SomeClassStub = function(){
  cls.apply(this, arguments);
};
SomeClassStub.prototype = Object.create(originalCls.prototype);
// :::::::::::::::::::::::::::::::::

var myModule = proxyquire('my-module', {
  'some-class': SomeClassStub
});

SomeClassStub.prototype.shout = function(){
  console.log("whisper");
}

myModule.doSomething();

请注意,我对模拟(和测试!)相当新,所以我可能会遗漏一些显而易见的东西,但我希望proxyquire可以处理我自己的问题(而不是我需要使用另一个库或写上面的代码)。

0 个答案:

没有答案