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

标签 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... 函数放入单独的服务中,并在心里记下永远不要直接访问它们?

最佳答案

您是否尝试过将您的构造中的逻辑分离到不同的服务中,然后将这些服务依赖注入(inject)到您的httpRequest 服务中?这将允许您为注入(inject)的服务编写一次测试,而不是为每个构造函数重新编写它们。另外,看看 $resourceProvider .如果您正在构建基于 RESTful API 的内容,$resourceProvider 通常涵盖您需要的一切。希望对您有所帮助。

关于javascript - AngularJS - 具有复杂内部逻辑的单元测试工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25802808/

相关文章:

javascript - 创建对象之前等待文件下载

javascript - 如何在不覆盖父范围的情况下将参数传递给指令?

unit-testing - Koin的KotlinTest:InvocationTargetException

javascript - Protractor - 如何跳转到网格中的下一行并返回找到的值

javascript - 如何在表单中添加按钮,在提交时检查必填字段但不刷新页面?

javascript - 我可以在 angularjs 指令中使用 JQuery 插件吗?

angularjs - Socket.io - 向不同权限级别的用户广播的策略

reactjs - 如何用 enzyme 、 Chai 测试 HOC

java - JUnit 5 @Nested 注释的目的是什么

javascript - 如何使用 MongoDB 执行请求 "select article where title = "x""