2015-04-15 83 views
1

我有一个工厂函数,它直接返回http承诺(其大约3层深,并且我不关心该路径和返回的内容)

它看起来像这样:

user.create() 
    .success(function(result){}) 
    .error(function(err){}) 

我只想嘲笑的成功和错误位。我尝试过使用$ q并解决或拒绝它,但这似乎不适用于成功和错误。

我的模拟工厂带Q的样子:

var user = { 
    create: function (email) { 
     var deferred = q.defer(); 
     deferred.resolve(); 
     return deferred.promise; 
    } 
}; 

而且是相当多我想要使用。有没有办法可以返回成功和错误,而不是呢?


这工作,这样的代码将执行(我基于它关闭的$ HTTP源代码),但不知道如何与它

var factory = { 
     factoryFunction: function() { 
      var deferred = q.defer(); 

      //You can test that it was called here 
      deferred.resolve(); 

      var promise = deferred.promise; 
      promise.success = function (fn) { 
       //Both success and error get called... be careful 
       return promise; 
      }; 

      promise.error = function (fn) { 
       //Both success and error get called... be careful 
       return promise; 
      }; 
      return promise; 
     } 
    }; 
+0

我们永远需要从工厂返回一个承诺。你能说出这种情况吗,正如你采取这种方法的原因?你想要工厂做什么? –

+1

@manasisakhare,这是明显错误的。服务当然会回复承诺。 –

+0

我会重构调用代码,并将返回的承诺视为常规承诺而不是HTTP承诺。请注意$ q有一个'.when()'方法,它返回一个已解决的承诺。 –

回答

0

测试逻辑如果使用茉莉花运行针对这个测试你可以使用spyOn。

spyOn(工厂, '创造')andCallFake(函数(){ 回报$ .Deferred()解决({ 返回object:真 });} )。

这个网站有关于如何使用spyOn一个伟大的名单:http://tobyho.com/2011/12/15/jasmine-spy-cheatsheet/

相关问题