Unit testing AngularJS与Jasmime、嵌套服务测试

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

在阅读了很多关于AngularJS与Jasmine测试的帖子后,我得出结论,我构建服务的方式不是可测试的

不过,我对AngularJS的理解太多了,无法真正掌握更好的方法。我的一些同事告诉我,我可以测试嵌套方法,但似乎不是这样

因此,情况如下:

我有一个服务,它执行对restfull 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问题,而当涉及到使用注入服务测试服务时,我似乎做不好

这是我在Plunker的代码:

正如您所看到的,我正在尝试测试从我的服务返回的值

我已经干了4天了!我绝望了!任何帮助都将不胜感激

请原谅我的英语错误

关于

我认为可能存在一个阻碍您完全按照自己的意愿进行测试的问题—端到端测试。如果您允许您的HTTP请求一直到第三方URL(即,您没有模仿他们的回复),那么您就没有进行单元测试

下面是一个端到端测试的工作示例,将调用保存到twitter本身(因为我提到的问题)。基本上,您的测试代码存在以下问题:

  • 您得到的是一个承诺,即您不会
    ,然后
    -ing
    
  • 您需要在promise返回的角度资源上调用
    get
    或其他内容来调用该资源
  • 您正在将一个字符串与一个对象进行比较(I
    JSON.stringify()
    -为您编辑该对象)
  • 您需要模拟HTTP请求(或者获得
    passThrough()
    working,这是我无法做到的)
结果如下:


谢谢你,杰瑞德!它就像一个符咒!我不知道整个回复过程都在嘲笑我!多亏了你,一切都正常了!我很高兴!我看到你在这个问题上纠缠了好几天,所以我想我可以帮你一把:)如果它回答了你的问题,别忘了投赞成票,并接受它作为正确答案!贾里德,我肯定会支持你的回答,不幸的是,我在这个问题上是个无赖,除非我有一定的声誉,否则它不会让我这么做。一旦我有了这样的名声,我一定会投票支持你的回答。再次感谢!