测试角度服务

时间:2014-10-08 07:51:23

标签: angularjs unit-testing

这可能是一个非常愚蠢的问题,但我无法在其他任何地方找到答案。

我想对现在有两个简单操作的服务进行单元测试:

angular.module('transaction').factory('Transaction',
    function() {
        var transactionList = [];

        // Public API
        return {
            addTransaction: function(transaction) {
                transactionList.push(transaction);
            },
            getTransactions: function(){
                return transactionList;
            }
        };
    }
);

测试

现在在我的测试中我想测试服务的addTransactiongetTransactions方法是否有效,但我不确定如何正确地做到这一点,因为我现在正在做的是使用其他方法测试第一个,例如:

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]);
});

我希望这些方法变得更加复杂,但我想要做的是有办法测试其中一种方法而不必使用另一种方法。如果有人能指出一些类似于此的操作测试的例子,那将是很好的。

1 个答案:

答案 0 :(得分:1)

我可以看到两种独立测试方法:

1)使transactionList公开可用:

Transaction.addTransaction(trans);
expect(Transaction.transactionList).toEqual([trans]);

2)在两种方法中返回transactionList

 expect(Transaction.addTransaction(trans)).toEqual([trans]);

我会使用第二个解决方案,因为您可以将transactionList保持为私有。