我试图将我的大脑包裹在 AngularJS 中的依赖注入上。假设这是我非常激动人心的应用程序代码:
function PrideRockCtrl($scope, King) {
$scope.king = King;
}
angular.module('Characters', ['ngResource'])
.factory('King', function() {
return "Mufasa";
});
我想测试PrideRockCtrl
。如果我按照文档和教程中的示例进行操作,我可以使用module('Characters')
来配置注入器并使用inject()
来获取一些依赖项。IE:
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");
}));
});
这很好用,但这不是一个跨测试框架的解决方案。和测试助手只与 Jasmine 兼容module()
。inject()
module()
在不使用or的情况下手动完成相同的依赖注入的最佳方法是什么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/