必须从$get工厂方法返回一个值



我正在测试一个Angular服务,我知道它在功能上已经存在一段时间了。我刚刚来复古适合一些测试,但我得到一些奇怪的问题,我得到一个消息"必须从$get工厂方法返回一个值"从茉莉测试。

服务在网站中工作,服务返回一个API

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

我相信这足以让它工作,但我不明白为什么测试会抱怨它没有返回$get。

哦,我所做的所有测试都是试图期望服务被定义。

编辑:完整服务代码,

(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;
}
}());

没有更多的测试代码很难判断。

$get是来自服务提供者的方法。对于每个服务,都有一个提供者负责通过$get方法创建服务的实例。如果您有一个名为myService的服务,那么就有一个提供程序myServiceProvider。在内部,当引导你的应用时,Angular会调用mysServiceProvider.$get来获取你的服务实例。

如果你正在修改提供者和提供者的模拟,这可能是一个原因…

最新更新