2016-09-12 45 views
0

我试图测试一个Angular服务,我知道它在功能上已经适用了一段时间。我刚来复古适合现在的一些测试,但我收到了一些奇怪的问题,我收到一条消息,“必须从茉莉花测试中返回$ get factory method的值”。

服务做工作,在网站和服务将返回一个API

var service = { 
     setStartLanguage: setStartLanguage, 
     setLanguage: setLanguage, 
     supportedLanguages: supportedLanguages, 
     currentLanguage: etCurrentLanguage.currentLanguage, 
     getLanguage: getLanguage 
    }; 

    return service; 

我相信这是足以让它工作,但我无法弄清楚,为什么测试抱怨它没有返回$得到。

哦,我为测试所做的一切都试图预期服务已定义。

编辑: 全方位服务代码,

(function() { 
'use strict'; 

angular.module('app.core').factory('etLanguageService', ['$translate', '$route', 'etCurrentLanguage', 'supportedLanguages', 'localStorageService', etLanguageService]); 

function etLanguageService($translate, $route, etCurrentLanguage, supportedLanguages, localStorageService) { 

    function setLanugageFromLocalStorage(storedLanguage) { 
     etCurrentLanguage.currentLanguage = storedLanguage; 
     $translate.preferredLanguage(etCurrentLanguage.currentLanguage.code); 
     localStorageService.set('currentLanguage', etCurrentLanguage.currentLanguage); 
    } 

    function setLanguageFromBrowser() { 
     var language = etCurrentLanguage.get(); 

     if (!language) { 
      language = ''; 
     } 

     var cleanLanguage = language.substr(0, 2).toLowerCase(); 


     var supportedLanguage = _.find(supportedLanguages, function(language) { 
      return language.code === cleanLanguage; 
     }); 

     $translate.preferredLanguage(supportedLanguage.code); 
     localStorageService.set('currentLanguage', supportedLanguage); 
    } 

    function setStartLanguage() { 

     // first check if we have a stored language 
     var storedLanguage = localStorageService.get('currentLanguage'); 

     if (storedLanguage) { 
      setLanugageFromLocalStorage(storedLanguage); 
     } else { 
      setLanguageFromBrowser(); 
     } 

    } 

    function setLanguage(language) { 
     if (etCurrentLanguage.currentLanguage !== language) { 
      etCurrentLanguage.currentLanguage = language; 
      $translate.use(etCurrentLanguage.currentLanguage.code).then(function() { 
       localStorageService.set('currentLanguage', etCurrentLanguage.currentLanguage); 

       $route.reload(); 
      }); 
     } 
    } 

    function getLanguage() { 
     return localStorageService.get('currentLanguage'); 
    } 

    var service = { 
     setStartLanguage: setStartLanguage, 
     setLanguage: setLanguage, 
     supportedLanguages: supportedLanguages, 
     currentLanguage: etCurrentLanguage.currentLanguage, 
     getLanguage: getLanguage 
}; 

    return service; 
} 

}()); 
+0

你能分享进一步的代码来说明你是如何准确地使用你的控制器此服务等?这是您自己编写的服务,我假设(不是内置的Angular?) – mindparse

+0

您能告诉我们您的测试代码吗? –

回答

0

这很难说没有更多的测试代码。

$get是您的服务提供商提供的方法。对于每项服务,都有一个提供商负责通过$get方法创建服务实例。如果您有一个名为myService的服务,那么有一个提供商myServiceProvider。 Internaly在引导您的应用程序时,Angular呼叫mysServiceProvider.$get以获取您的服务实例。

如果你与供应商和供应商的嘲笑修修补补,这可能是一个原因...

+0

就是这样,这是一个直截了当的服务,不会做很多事情,但有一点是它在一个模块中,并使用来自另一个模块的服务,我想知道这是否会成为问题,我不知道为什么它会导致这个错误,但我可能会尝试将所有内容放入同一个模块中。我刚刚编辑完整的服务代码的第一篇文章。 –

相关问题