簡體   English   中英

必須從$ get工廠方法返回一個值

[英]must return a value from $get factory method

我正在嘗試測試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獲取服務的實例。

如果您要修改提供程序和提供程序的模擬,那可能是一個原因...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM