Unit testing AngularJS与Jasmime、嵌套服务测试
在阅读了很多关于AngularJS与Jasmine测试的帖子后,我得出结论,我构建服务的方式不是可测试的 不过,我对AngularJS的理解太多了,无法真正掌握更好的方法。我的一些同事告诉我,我可以测试嵌套方法,但似乎不是这样 因此,情况如下: 我有一个服务,它执行对restfull Web服务的访问并返回一个对象 看起来是这样的:Unit testing AngularJS与Jasmime、嵌套服务测试,unit-testing,angularjs,jasmine,plunker,Unit Testing,Angularjs,Jasmine,Plunker,在阅读了很多关于AngularJS与Jasmine测试的帖子后,我得出结论,我构建服务的方式不是可测试的 不过,我对AngularJS的理解太多了,无法真正掌握更好的方法。我的一些同事告诉我,我可以测试嵌套方法,但似乎不是这样 因此,情况如下: 我有一个服务,它执行对restfull Web服务的访问并返回一个对象 看起来是这样的: .factory('MyService', function( $resource, config, $q ) { return config.get("R
.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问题,而当涉及到使用注入服务测试服务时,我似乎做不好
这是我在Plunker的代码:
正如您所看到的,我正在尝试测试从我的服务返回的值
我已经干了4天了!我绝望了!任何帮助都将不胜感激
请原谅我的英语错误
关于我认为可能存在一个阻碍您完全按照自己的意愿进行测试的问题—端到端测试。如果您允许您的HTTP请求一直到第三方URL(即,您没有模仿他们的回复),那么您就没有进行单元测试
下面是一个端到端测试的工作示例,将调用保存到twitter本身(因为我提到的问题)。基本上,您的测试代码存在以下问题:
- 您得到的是一个承诺,即您不会
,然后
-ing李>
- 您需要在promise返回的角度资源上调用
或其他内容来调用该资源get
- 您正在将一个字符串与一个对象进行比较(I
-为您编辑该对象)JSON.stringify()
- 您需要模拟HTTP请求(或者获得
working,这是我无法做到的)passThrough()
- 您需要在promise返回的角度资源上调用
谢谢你,杰瑞德!它就像一个符咒!我不知道整个回复过程都在嘲笑我!多亏了你,一切都正常了!我很高兴!我看到你在这个问题上纠缠了好几天,所以我想我可以帮你一把:)如果它回答了你的问题,别忘了投赞成票,并接受它作为正确答案!贾里德,我肯定会支持你的回答,不幸的是,我在这个问题上是个无赖,除非我有一定的声誉,否则它不会让我这么做。一旦我有了这样的名声,我一定会投票支持你的回答。再次感谢!