【发布时间】:2018-09-20 14:01:49
【问题描述】:
具有以下 balanceRepository.js 文件。
module.exports = function(){
this.getBalance = (accountId)=>{
throw 'NotImplementedException';
};};
还有服务transactionService.js文件。
module.exports = function(balanceRepo){
this.isTransactionAllowed = (amount, accountId)=>{
const balance = balanceRepo.getBalance(accountId);
return amount <= balance;
};};
我想进行单元测试,当我们调用 transactionService.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 的实际实现中。然后,我断言在 spy 上调用了 getBalance 方法。这对我来说很有意义,但它不起作用!
我怎样才能注入一个假的并断言它的一个方法被调用了?
【问题讨论】:
标签: node.js unit-testing mocha.js sinon should.js