1

我已經嘗試了爲AngularJS服務編寫角度轉換的單元測試的許多不同方法,並且我無法將其解決。任何意見,將不勝感激。這是我最有前途的例子:使用角度轉換調用測試AngularJS服務的單元

(function() { 
    var app = angular.module("theApp", ["pascalprecht.translate"]); 

    var theService = function($translate) { 
     var theFunction = function(data) { 
      return $translate("FOO", { input: data.in }).then(function(trans) { 
       data.out = trans; 
      }); 
     }; 

     return { 
      theFunction: theFunction 
     }; 
    }; 

    app.factory("theService", ["$translate", theService]); 
}()); 

describe("theService", function() { 
    beforeEach(module("theApp", function($translateProvider, $provide) { 
     $translateProvider.useLoader('customLoader'); 
     $provide.service('customLoader', function($q) { 
      return function() { 
       var deferred = $q.defer(); 
       deferred.resolve({ 
        "FOO": "foo {{input}}" 
       }); 
       return deferred.promise; 
      }; 
     }); 
    })); 

    it("function translates input", inject(function($rootScope, theService) { 
     var data = { in: "bar", out: "fail" }; 
     theService.theFunction(data); 
     $rootScope.$apply(); 
     expect(data.out).toBe("foo bar"); 
    })); 
}); 

一個的jsfiddle可以在這裏找到:http://jsfiddle.net/danBhentschel/q71r874t/

回答

2

好。我想我是靠自己想出來的。我開始了與測試在這裏找到:

https://github.com/angular-translate/angular-translate/blob/master/test/unit/service/translate.spec.js#L409

,我能這個測試通過慢慢演變成什麼,我想做的事:

(function() { 
    var app = angular.module("theApp", ["pascalprecht.translate"]); 

    var theService = function($translate) { 
     var theFunction = function(data) { 
      return $translate("FOO", { input: data.in }).then(function(trans) { 
       data.out = trans; 
      }); 
     }; 

     return { 
      theFunction: theFunction 
     }; 
    }; 

    app.factory("theService", ["$translate", theService]); 
}()); 

describe("theService", function() { 
    var $rootScope; 

    beforeEach(module("theApp", function($translateProvider, $provide) { 
     $translateProvider.useLoader("customLoader"); 
     $provide.service("customLoader", function($q) { 
      return function() { 
       var deferred = $q.defer(); 
       deferred.resolve({ 
        "FOO": "foo {{input}}" 
       }); 
       return deferred.promise; 
      }; 
     }); 
    })); 

    beforeEach(inject(function ($translate, _$rootScope_) { 
     $rootScope = _$rootScope_; 
     $translate.use("en_US"); 
     $rootScope.$apply(); 
    })); 

    it("function translates input", inject(function(theService) { 
     var data = { in: "bar", out: "fail" }; 
     theService.theFunction(data); 
     $rootScope.$apply(); 
     expect(data.out).toBe("foo bar"); 
    })); 
}); 

一個的jsfiddle與解決方案,可以發現這裏:http://jsfiddle.net/danBhentschel/yLt3so14/

請隨時指出我犯的任何愚蠢的錯誤。我在這方面還很新。

相關問題