編集: 単体テストを実行することができました - サービスを含むコードを別のファイルと別のモジュールに移動し、この新しいモジュールを fooBar モジュールの要件にし、各「it」ブロックが呼び出される前に導入しましたコードbeforeEach(module(<new_service_module_name))
。ただし、アプリケーションはまだ実行されません。コンソールにもエラーはありません。これが残っている唯一の問題です。コントローラーの定義にグローバル スコープを使用すると、アプリケーションは動作しますが、angular.module.controller を使用すると動作しません。
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
私が作成したサービスは、単純に getter メソッドと 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 を使用すると、それらが壊れているように見えます。
私が指摘したもう 1 つのポイントは、コントローラー コードを のapp.js
代わりに含めるcontrollers.js
と、アプリケーションと単体テストが再び機能し始めることです。しかし、それらを同じファイルに含めることはできません。アプリケーションと単体テストを壊さずに角度範囲でこれを実行するにはどうすればよいですか?