proxyquire с require.exports = ClassConstructor

Если у меня есть модуль, который экспортирует один класс, как я могу издеваться над ним? 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();
}

Тест-мой-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 ответов

Другие вопросы по тегам