我有一個使用角度翻譯(https://github.com/PascalPrecht/angular-translate)的應用程序。翻譯在應用程序中通過瀏覽器效果很好,但當我嘗試測試任何控制器時,我得到錯誤:意外的請求:GET語言環境/語言環境en.json。由於translate在啓動時對語言文件執行GET請求,因此如何對我的控制器進行單元測試?如何測試在App Config中初始化的角度翻譯控制器?
我使用與Karma一樣的yeoman角發生器。
App.js:
angular.module('myApp', ['ngCookies', 'ui.bootstrap', 'pascalprecht.translate'])
.config(function ($routeProvider, $locationProvider, $translateProvider) {
$routeProvider
.when('/', {
templateUrl: 'views/main.html',
controller: 'MainCtrl'
})
.otherwise({
redirectTo: '/'
});
$translateProvider.useStaticFilesLoader({
prefix: 'locale/locale-',
suffix: '.json'
});
$translateProvider.uses('en');
$translateProvider.useLocalStorage();
});
控制器測試:
describe('Controller: DocumentationCtrl', function() {
// load the controller's module
beforeEach(module('myApp'));
var DocumentationCtrl,
scope,
$httpBackend;
// Initialize the controller and a mock scope
beforeEach(inject(function ($controller, $rootScope, $injector) {
$httpBackend = $injector.get('$httpBackend');
scope = $rootScope.$new();
DocumentationCtrl = $controller('DocumentationCtrl', {
$scope: scope
});
}));
it('should attach a list of awesomeThings to the scope', function() {
$httpBackend.whenGET('locale/locale-en.json').respond(200, {
"TITLE": 'My App'
});
expect(scope.awesomeThings.length).toBe(3);
});
});
文檔控制器僅僅是一個標準產生控制器。
非常感謝你的回答。我仍然不知道如何測試這個,雖然我切換到preferredLanguage(),所以我的app.config看起來像這樣:$ translateProvider.useStaticFilesLoader({locale/locale-', 後綴:'。json' }); $ translateProvider.preferredLanguage('us'); $ translateProvider.useLocalStorage(); – Zacho
哦,並且出現錯誤是因爲您不希望顯式獲取http獲取請求。所以在你的it()規範中,你應該做如下的事情:$ http.expectGET('locale/locale-us.json');並且不要忘記通過$ http.flush()刷新掛起的響應。 – PascalPrecht
我知道它的工作。解決的辦法是在我的單元測試中初始化應用程序之前使用preferredLanguage()並覆蓋函數。這是一個很大的應用程序,我不希望在每個單元測試中都使用locale expectGET。謝謝! – Zacho