AngularJS - 具有复杂内部逻辑的单元测试工厂

时间:2014-09-12 07:16:33

标签: javascript angularjs unit-testing jasmine

我现在正在为angularjs应用程序编写单元测试,并希望就如何测试我的工厂提出一些建议。不幸的是,由于我在编写测试之前编写了所有代码,因此我的工厂中有一些相当复杂的逻辑。

目前,例如,我有一个httpRequest服务:

angular.module('myApp')
    .service('httpRequest', ['$http',
        function($http) {
            function constructHttpRequest() {/*code*/}
            function constructCertainTypeOfHttpRequest() {/*code*/}
            function constructOtherTypeOfHttpRequest() {/*code*/}

            return {
                method1: function() {/*code*/}
                method2: function() {/*code*/}
                method3: function() {/*code*/}
            }
        }]);

该服务公开了许多不同的请求方法,这些方法使用相当复杂的construct...函数(未公开)来生成请求。

理想情况下,我会测试所有construct...函数,然后测试方法是否使用正确的参数调用这些函数;我真的不想复制和粘贴construct...逻辑的测试。

我的问题是 - 为了测试,是否有任何简洁的方法来公开这些函数,但是没有将它们暴露给整个应用程序?在理想的世界中,我应该如何编写工厂代码;我应该将construct...函数放入一个单独的服务中,只是做一个心理记录而不是直接访问它们吗?

1 个答案:

答案 0 :(得分:0)

您是否尝试在不同服务中分离构造中的逻辑,然后依赖注入这些服务到您的httpRequest服务中?这将允许您为注入的服务编写一次测试,而不是为每个构造函数重写它们。另外,请查看$resourceProvider$resourceProvider通常涵盖了您根据RESTful API构建内容所需的一切。希望它有所帮助。