Во-первых, я бы немного изменил определение вашего класса (имя класса в верхнем регистре и исправление назначения базы данных):
var Wrapper = (function() {
function Wrapper() {
this.db = require("database");
}
Wrapper.prototype.insertUser = function(doc) {
return this.db.query("INSERT INTO USERS...");
};
return Wrapper;
})();
Чтобы заглушить весь класс:
var WrapperStub = sinon.spy(function() {
return sinon.createStubInstance(Wrapper);
});
sinon.createStubInstance
создаст экземпляр Wrapper, где каждый метод является заглушкой. sinon.spy
позволит нам следить за созданием экземпляра класса.
Таким образом, вы можете выполнять это следующим образом:
// verify instantiation
var wrapper = new WrapperStub();
expect(WrapperStub).to.have.been.calledWithNew;
// verify method stub
wrapper.insertUser.returns('data');
expect(wrapper.insertUser()).to.equal('data');
expect(wrapper.insertUser).to.have.been.calledOnce;
(в утверждениях используются chai и синон-чай)
Я сказал просто «потренируйтесь», потому что этот фрагмент кода не является реальным модульным тестом. Экземпляры и вызовы методов будут выполняться вашим тестируемым субъектом.
Теперь, если вы хотите имитировать зависимость, введенную с помощью require(), например db = require('database')
в вашем примере, вы можете попробовать инструмент тестирования, например Jest (но без использования sinon) или sinonquire, который я создал, вдохновленный Jest, но для использования его с sinon плюс ваш любимый инструмент тестирования (у меня mocha). Внутри sinonquire используется тот же метод, показанный выше, для объединения sinon.spy
и sinon.createStubInstance
для создания класса-заглушки.
person
Ricardo Stuven
schedule
28.10.2015