如何在单元测试中注入Angular控制器
How can I inject an Angular controller into my unit test
我真的希望这是一个微不足道的问题。是的,我有RTF。实际上,我使用Angular文档化的方法来注入控制器,但由于某些原因,我的控制器没有定义。这里的主要区别是,我习惯于开发单模块应用程序,而这次我有了一个多模块应用程序。我认为这不会有什么不同,但你做到了。我将直接进入代码:,而不是冗长的描述
使用Angular 1.2.16
单元测试框架:Jasmine
app.js
angular.module('OBB', [
// Native AngularJS DI
'ngResource', 'ngCookies',
// bunch of modules
...
// OBB Page Modules
'OBB.home', 'OBB.buckets', 'OBB.company', 'OBB.advSearch', 'OBB.users'
])
所以,我正在尝试测试OBB.home模块中的控制器。
home.js
angular.module('OBB.home', ['ui.router'])
.controller('HomeCtrl', ['$log', '$rootScope', '$scope', '$state', 'AUTH_EVENTS',
function HomeCtrl ($log, $rootScope, $scope, $state, AUTH_EVENTS) {
$scope.signInFormData = {
email: null, password: null
};
//more code...
}]);
home.spec.js
describe('Unit Home Controllers: ', function () {
var homeController, scope;
beforeEach(module('OBB.home'));
beforeEach(inject(function (_$rootScope_, $controller) {
scope = _$rootScope_.$new();
homeController = $controller('HomeCtrl', {
$rootScope: _$rootScope_,
$scope: scope,
$log: {},
$state: {},
AUTH_EVENTS: {},
});
}));
it('Home Controller is correctly instantiated', inject(function () {
expect(scope).toBeDefined(); // Pass
expect(scope.signInFormData).toBeDefined(); // Fails
}));
});
您需要模拟/加载依赖项。
describe('Unit Home Controllers: ', function () {
var homeController, scope;
beforeEach(module('OBB.home'));
beforeEach(inject(function (_$rootScope_, $controller) {
scope = _$rootScope_.$new();
homeController = $controller('HomeCtrl', {
$rootScope: _$rootScope_,
$scope: scope,
$log: {}, //You will have to add methods as needed
$state: {},
AUTH_EVENTS: {}
});
}));
it('Home Controller is correctly instantiated', inject(function () {
expect(scope).toBeDefined(); // Fails
expect(scope.signInFormData).toBeDefined(); // Fails
}));
});
相关文章:
- 正在将lodash注入Angular提供程序
- 是否可以将服务注入Angular 1.5组件's templateUrl属性
- $injector:modulerr将自定义模块注入Angular应用程序
- 如何在单元测试中注入Angular控制器
- 在 Karma/Jasmine 单元测试中注入 Angular $timeout服务的真实实现
- 正在注入Angular模块:未知提供程序
- Ionic 2-导入/注入Angular 2 HTTP组件
- 只有在需要时才向控制器注入Angular服务
- 将模块.factory注入angular.js中的另一个模块的最佳方式
- 在AngularJS模块中包装javascript类并注入angular服务的正确方式
- 如何正确注入angular服务
- 如何将html注入Angular UI引导弹出窗口
- 在注入angular服务时运行同一段代码
- 依赖注入Angular 2
- 注入angular消息依赖失败的angular js
- 有没有可能在运行时使用angularAMD惰性加载和注入angular模块?
- 组件不能解析$scope注入(angular 1.3.16)
- 将angularjs服务注入Angular
- 将$http注入angular“;使用严格的“;服务
- 将依赖项注入 Angular 服务进行测试