在 Angular 中使用 Karma 时出现未知提供程序错误
Unknown Provider error using Karma with Angular
我有一个模块
export default angular.module('pfui.user', [])
.controller('ModifyUserController', ModifyUserController)
有控制器
export default class ModifyUserController{
userid:string;
...
}
我正在尝试创建一个单元测试,它可以测试控制器中调用服务执行某些操作的某些方法。这是我的 Karma 脚本 -
describe('ModifyUserControllerTester', function () {
var $controller;
beforeEach(angular.mock.module('ui.router'));
beforeEach(angular.mock.module('pfui.user'));
beforeEach(inject(function (_$controller_) {
$controller = _$controller_;
}));
describe('Test', function () {
it('test accessing controller', function () {
let $scope = {};
var controller = $controller('ModifyUserController', {
$scope: $scope
});
expect($scope['userid']).toBe(undefined);
});
});
});
当我运行测试时,我得到一个错误
Error: [$injector:unpr] Unknown provider: UsersProvider <- Users <- ModifyUserController
最初我收到一个错误消息,指出缺少 $stateProvider。所以我添加了
beforeEach(angular.mock.module('ui.router'));
那个错误消失了。
这是我第一次尝试编写 Karma 测试。我不确定我错过了什么。为什么 Karma 在模块中没有供应商时要寻找供应商?非常感谢任何帮助。
你的问题没有显示任何对 ModifyUserController 的依赖注入,但根据你发布的错误来看,你似乎没有向控制器提供 'Users' 服务。
describe('ModifyUserControllerTester', function () {
var $controller;
var mockUsers;
beforeEach(angular.mock.module('ui.router'));
beforeEach(angular.mock.module('pfui.user'));
beforeEach(inject(function (_$controller_) {
$controller = _$controller_;
}));
describe('Test', function () {
it('test accessing controller', function () {
//----define your mock dependency here---//
let mockUsers = jasmine.createSpyObj('mockUsers', ['user_method1',
'user_method2',...]);
let $scope = {};
var controller = $controller('ModifyUserController', {
$scope: $scope,
Users: mockUsers
});
expect($scope['userid']).toBe(undefined);
});
});
});
PS。由于单元测试的最佳实践是单独进行的,因此您还应该考虑提供模拟状态提供程序与导入实际的 ui.router 模块
我有一个模块
export default angular.module('pfui.user', [])
.controller('ModifyUserController', ModifyUserController)
有控制器
export default class ModifyUserController{
userid:string;
...
}
我正在尝试创建一个单元测试,它可以测试控制器中调用服务执行某些操作的某些方法。这是我的 Karma 脚本 -
describe('ModifyUserControllerTester', function () {
var $controller;
beforeEach(angular.mock.module('ui.router'));
beforeEach(angular.mock.module('pfui.user'));
beforeEach(inject(function (_$controller_) {
$controller = _$controller_;
}));
describe('Test', function () {
it('test accessing controller', function () {
let $scope = {};
var controller = $controller('ModifyUserController', {
$scope: $scope
});
expect($scope['userid']).toBe(undefined);
});
});
});
当我运行测试时,我得到一个错误
Error: [$injector:unpr] Unknown provider: UsersProvider <- Users <- ModifyUserController
最初我收到一个错误消息,指出缺少 $stateProvider。所以我添加了
beforeEach(angular.mock.module('ui.router'));
那个错误消失了。
这是我第一次尝试编写 Karma 测试。我不确定我错过了什么。为什么 Karma 在模块中没有供应商时要寻找供应商?非常感谢任何帮助。
你的问题没有显示任何对 ModifyUserController 的依赖注入,但根据你发布的错误来看,你似乎没有向控制器提供 'Users' 服务。
describe('ModifyUserControllerTester', function () {
var $controller;
var mockUsers;
beforeEach(angular.mock.module('ui.router'));
beforeEach(angular.mock.module('pfui.user'));
beforeEach(inject(function (_$controller_) {
$controller = _$controller_;
}));
describe('Test', function () {
it('test accessing controller', function () {
//----define your mock dependency here---//
let mockUsers = jasmine.createSpyObj('mockUsers', ['user_method1',
'user_method2',...]);
let $scope = {};
var controller = $controller('ModifyUserController', {
$scope: $scope,
Users: mockUsers
});
expect($scope['userid']).toBe(undefined);
});
});
});
PS。由于单元测试的最佳实践是单独进行的,因此您还应该考虑提供模拟状态提供程序与导入实际的 ui.router 模块