这可能是一个非常愚蠢的问题,但我无法在其他任何地方找到答案。
我想对现在有两个简单操作的服务进行单元测试:
angular.module('transaction').factory('Transaction',
function() {
var transactionList = [];
// Public API
return {
addTransaction: function(transaction) {
transactionList.push(transaction);
},
getTransactions: function(){
return transactionList;
}
};
}
);
现在在我的测试中我想测试服务的addTransaction
和getTransactions
方法是否有效,但我不确定如何正确地做到这一点,因为我现在正在做的是使用其他方法测试第一个,例如:
it('should be able to return an array of transactions', function() {
//add new transaction
var trans = {id: 1, value: test};
Transaction.addTransaction(trans);
//test get
var result = Transaction.getTransactions();
expect(Array.isArray(result)).toBe(true);
expect(result).toEqual([trans]);
});
it('should be able to add a transaction', function(){
var trans = {id: 1, value: test};
Transaction.addTransaction(trans);
var result = Transaction.getTransactions();
expect(result).toEqual([trans]);
});
我希望这些方法变得更加复杂,但我想要做的是有办法测试其中一种方法而不必使用另一种方法。如果有人能指出一些类似于此的操作测试的例子,那将是很好的。
答案 0 :(得分:1)
我可以看到两种独立测试方法:
1)使transactionList公开可用:
Transaction.addTransaction(trans);
expect(Transaction.transactionList).toEqual([trans]);
2)在两种方法中返回transactionList
expect(Transaction.addTransaction(trans)).toEqual([trans]);
我会使用第二个解决方案,因为您可以将transactionList保持为私有。