編輯:我設法讓我的單元測試運行 - 我將包含服務的代碼移動到不同的文件和不同的模塊,使這個新模塊成爲fooBar模塊的一個要求,然後在每個「it」塊被調用之前,引入代碼beforeEach(module(<new_service_module_name))
。但是,我的應用程序仍然無法運行。控制檯中也沒有錯誤。這是唯一的問題 - 當我使用全局作用域控制器定義時,應用程序可以工作,但是當我使用angular.module.controller時 - 它不會。AngularJS - 錯誤:未知提供者:searchResultsProvider
我有一個包含以下內容的文件app.js
:
'use strict';
var app = angular.module('fooBar', []);
app.config(['$routeProvider', function($routeProvider) {
$routeProvider.
when('/', {
templateUrl: 'partials/form-view.html',
controller: FormViewCtrl
}).
when('/resultDisplay', {
templateUrl: 'partials/table-view.html',
controller: TableViewCtrl
}).
otherwise({redirectTo: '/'});
}]);
app.service('searchResults', function() {
var results = {};
return {
getResults: function() {
return results;
},
setResults: function(resultData) {
results = resultData;
}
};
});
我有一個包含以下另一個文件controllers.js
:
'use strict';
var app = angular.module('fooBar', []);
app.controller('FormViewCtrl', ['$scope', '$location', '$http', 'searchResults',
function ($scope, $location, $http, searchResults) {
//Controller code
}]);
searchResults
是我創建的只是具有吸氣服務和setter方法。上面的控制器使用setter方法,因此服務被注入到它中。
因此,我的應用程序不運行! 如果我改變控制器代碼是全球性的這樣:
function ($scope, $location, $http, searchResults) {
//Controller code
}
然後應用程序的工作!
而且,如果我用的是全球範圍內,那麼下面的單元測試用例的工作原理:
'use strict';
/*jasmine specs for controllers go here*/
describe('Foo Bar', function() {
describe('FormViewCtrl', function() {
var scope, ctrl;
beforeEach(module('fooBar'));
beforeEach(inject(function($rootScope, $controller) {
scope = $rootScope.$new();
ctrl = $controller('FormViewCtrl', {$scope: scope});
}));
}
//"it" blocks
}
如果我恢復到模塊的範圍,我得到的錯誤 -
Error: Unknown provider: searchResultsProvider <- searchResults
因此通過使用全局範圍我的應用程序和單元測試運行,但通過使用app.controller,他們似乎打破。
我注意到的另一點是,如果我將控制器代碼包含在app.js
而不是controllers.js
中,那麼應用程序和單元測試將再次開始工作。但是我不能將它們包含在同一個文件中 - 我如何在不中斷應用程序和單元測試的情況下在角度範圍內運行它?
而不是編輯你應該創建一個新的答案,並標記爲正確的! – Soviut