我目前正在为我的 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/