У меня есть функция, которая вызывается в моем контроллере API, которая вызывает унаследованное свойство из класса.Как я могу издеваться над этим унаследованным свойством, чтобы оно выполняло свое поведение, но не обязательно подключается к сети / базе данных, где выполняется инициализация?Я пытался использовать насмешку, но она не ведет себя так, как я ожидаю.
PS Я спрашиваю об этом, так как пока не знаю, как создать тестовый сценарий с использованием sinon-chai.
Это то, что я пробовал до сих пор:
//test-process.js
const sinon = require('sinon');
const chai = require('chai');
const expect = chai.expect;
const should = chai.should();
const mockery = require('mockery');
chai.use(require('chai-as-promised'));
const obj = require('./data/test-process-data');
let sandbox,req;
describe('Test process controller') ()=>{
beforeEach(()=>{
sandbox = sinon.createSandbox();
req ={
body: obj.body.data,
};
const mockingFunc = require('./callFunc');
mockery.registerMock('./callFunc', mockingFunc);
sinon.mock(mockingFunc, 'getDefaultFunc');
})
afterEach(() => {
sandbox.restore();
})
describe('Test Create Transaction', () => {
it('should create new transaction', async () => {
const res = await chai.request(url).post('/api/process').send(req.body);
should.exist(res.body);
res.body.should.be.a('object');
res.should.have.status(200);
res.body.should.have.property('message').eql('Successfully saved transaction Data.');
done();
});
});
}
Вот мои функции и коды контроллера:
//mymainfunc.js
const processFunc = require('processFunc');
class mainFunc{
constructor(name,address,phoneNumber){
this.name = name;
this.address = address;
this.phoneNumber = phoneNumber;
}
init(options){
this.conOptions = options;
}
async processData(funcName,params){
const runProcess = await processFunc.createTransaction(funcName,params);
return runProcess;
}
}
module.exports = mainFunc;
//callFunc.js
const mainFunc = require('mymainfunc');
const callFunc = {};
let defaultFunc;
const fullname="Alix";
const address = "Colorado";
const contactNumber = "303-555-01234";
//this is being called in server.js
callFunc.init() = async (dbConfig,netConfig){
try{
....
defaultFunc = new mainFunc(fullname,address,contactNumber);
defaultFunc.init(netConfig);
}catch(err){
throw new Error('process error: ' + err);
}
}
callFunc.getDefaultFunc = () => {
return defaultFunc;
};
module.exports = callFunc;
//process api controller
const callFunc = require('./callFunc');
const process = {};
process.create= asyc(req,res){
const transactionData= {
orderId: req.body.orderId,
items:req.body.items
}
try{
const submitData = await callFunc.getDefaultFunc().processData('createTransaction',transactionData);
res.json({ statusCode: 200, success: true, data: JSON.parse(submitData.toString())});
}catch(err){
res.json({ statusCode: 500, data: {}, message: "Transaction Error!" });
}
};
module.exports = process;