У меня есть класс, который использует базу данных, которую я на самом деле не хочу вызывать. Покопавшись, я нашел Sinon, который, похоже, решил эту проблему для внутренних методов, но не могу заставить его работать с необходимыми модулями. Я знаю, что тест не очень много сейчас, но я хочу подтвердить, что я могу сделать это, прежде чем идти дальше.
Когда я делаю ниже, БД не заглушается.
Код, который я пытаюсь протестировать, выглядит следующим образом:
const db = require('../../models');
const Op = db.Sequelize;
class UserSearch{
async _resolveUserType(userType){
let permission;
if (typeof userType === 'number'){
permission = await db.permission.findOne({ where: { id : userType } });
}else{
permission = await db.permission.findOne({ where: { type : userType } });
}
return permission;
}
}
Код теста:
const db = require('../../models');
const { UserSearch } = require('./userSearch');
describe('UserSearch Test Suite', function(){
it('should return an object', async function(){
const fakeDb = {
permission: {
findOne: function () {
return new Promise(resolve => {
return resolve({id: 3, type: 'student'})
});
}
}
};
const userSearch = new UserSearch();
sinon.stub(db, 'permission').returns(fakeDb.permission);
const permission = await userSearch._resolveUserType(3);
expect(permission).to.be.an('object');
});
});