Имеет следующий файл balanceRepository.js.
module.exports = function(){
this.getBalance = (accountId)=>{
throw 'NotImplementedException';
};};
и файл сервиса TransactionsService.js.
module.exports = function(balanceRepo){
this.isTransactionAllowed = (amount, accountId)=>{
const balance = balanceRepo.getBalance(accountId);
return amount <= balance;
};};
Я хотел бы провести модульное тестирование, когда мы вызываем транзакциюService.isTransactionAllowed., он будет вызывать внутренне к balanceRepository.getBalance.Я ожидал, что следующий код будет работать.
let BalanceRepository = require('../balanceRepository');
let TransactionService = require('../transactionService');
let should = require('should');
let sinon = require('sinon');
describe('transaction service', ()=>{
let fakeBalanceRepo = sinon.spy(BalanceRepository);
let transactionSrv = new TransactionService(fakeBalanceRepo);
transactionSrv.isTransactionAllowed(100, 987654321);
it('should call getBalance', ()=>{
fakeBalanceRepo.getBalance.should.be.called();
});});
Я создаю шпион класса BalanceRepository.Я внедряю этот шпионский объект в мою реальную реализацию TransactionService.Затем я утверждаю, что метод getBalance вызывается у шпиона.Это имеет смысл для меня, но это не работает !!
Как я могу ввести фальшивку и утверждать, что был вызван один из ее методов?