在阅读了这么多关于使用 Jasmine 进行 AngularJS 测试的帖子后,我得出的结论是,我构建服务的方式不是可测试的。
但是,我仍然对 AngularJS 太陌生,无法真正掌握更好的方法。我的一些同事告诉我,我可以测试嵌套方法,但似乎并非如此。
所以,情况如下:
我有一个服务,它执行一个 GET 到一个完整的 web 服务并返回一个对象。
它看起来像这样:
.factory('MyService', function( $resource, config, $q ) {
return config.get("RestServiceBaseUrl").then(function(baseUrl) {
return $resource(baseUrl+"params_necessary_to_my_rest_call")
})
})
它注入了该配置,这也是一项服务,它将返回我在物理配置文件中的任何内容,在这种情况下,它是一个 url,存储在 RestServiceBaseUrl JSon 变量下。无论如何,这是我注入的配置对象的 get 部分:
function get(sKey) {
var deferred = $q.defer()
ConfigGet(sKey, function (resp) {
deferred.resolve(resp['result'])
})
return deferred.promise
}
因此,如您所见,我必须嵌套返回,一个用于 config.get 方法,它来自服务;另一个是 GET 的返回,它也依赖于 $resource,也注入到我的服务中。该 $resource 来自角度资源。没有做任何事情来覆盖它。
在我的单元测试中,我尝试了很多方法来实现测试,但这很令人沮丧,因为当我通过配置问题时,我遇到了 $resource 问题,而且当它出现时我似乎无法正确执行使用注入服务测试服务。
这是我在 Plunker 的代码:http: //plnkr.co/edit/RSFTKq
如您所见,我正在尝试从我的服务中测试返回值。
我已经在这件事上做了 4 天了!我绝望了!任何帮助将不胜感激!
请原谅我的英语错误。
问候