私は AngularJS で依存関係の注入に頭を悩ませようとしています。これが私の非常にエキサイティングなアプリケーション コードであるとしましょう。
function PrideRockCtrl($scope, King) {
$scope.king = King;
}
angular.module('Characters', ['ngResource'])
.factory('King', function() {
return "Mufasa";
});
テストしたいPrideRockCtrl
。ドキュメントとチュートリアルの例に従えば、 を使用しmodule('Characters')
てインジェクターを構成し、 を使用inject()
していくつかの依存関係を取得できます。すなわち:
describe('Pride Rock', function() {
beforeEach(module('Characters'));
it('should be ruled by Simba', inject(function($rootScope, $controller) {
var scope = $rootScope.$new();
var ctrl = $controller(PrideRockCtrl, {$scope: scope});
expect(scope.king).toEqual("Mufasa");
}));
});
これは問題なく動作しますが、これはクロス テスト フレームワークのソリューションではありません。module()
およびテスト ヘルパーは、Jasmine とのinject()
み互換性があります。
module()
またはを使用せずに同じ依存性注入を手動で達成する最良の方法は何inject()
ですか?
私はこれを思いついた:
describe('Pride Rock', function() {
it('should be ruled by Mufasa', function() {
var $injector = angular.injector(['Characters']);
var $controller = $injector.get('$controller');
var scope = $injector.get('$rootScope').$new();
var king = $injector.get('King');
var ctrl = $controller(PrideRockCtrl, {$scope: scope, King: king});
expect(scope.king).toEqual("Mufasa");
});
});
これは非常に冗長に思えます。より良い方法はありますか?
jsFiddle: http://jsfiddle.net/johnlindquist/d63Y3/