我有一个模块
export default angular.module('pfui.user', [])
.controller('ModifyUserController', ModifyUserController)
有一个控制器
export default class ModifyUserController{
userid:string;
...
}
我正在尝试创建一个单元测试,可以测试控制器中调用服务来执行某些操作的某些方法。这是我的业力脚本 -
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正在寻找供应商?非常感谢任何帮助。
答案 0 :(得分:1)
您的问题没有显示对ModifyUserController的任何依赖注入,但是通过您发布的错误,看起来您还没有提供“用户”#39;为控制器提供服务。
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模块