我的控制器测试需要帮助。我有一个resolve
使用ui-router。在我的测试中,我需要弄清楚如何处理resolve
exampleData
。
config.js
angular.module('myModule')
.config(['$stateProvider', '$urlRouterProvider',
function($stateProvider, $urlRouterProvider) {
$stateProvider
.state('site', {
abstract: true,
resolve: {
exampleData: function(ExampleService) {
// ExampleService.get() makes an $http call
return ExampleService.get();
}
},
// etc
})
.state('example', {
parent: 'site',
url:'/example',
controller: 'ExampleCtrl as example',
templateProvider: function($templateCache) {
return $templateCache.get('views/example.html');
}
});
}]);
示例-controller.js
angular.module('myModule')
.controller('ExampleCtrl', ['exampleData',
function(exampleData) {
var self = this;
self.exampleData = exampleData;
// self.exampleData should output something like
// [
// {id: 1, title:'something'},
// {id: 2, title:'something'},
// {id: 3, title:'something'}
// ]
}]);
示例-controller.test.js
describe('Controller: ExampleCtrl', function() {
beforeEach(module('myModule'));
var ctrl;
beforeEach(inject(function($controller) {
ctrl = $controller('ExampleCtrl');
}));
describe('initialization', function() {
beforeEach(function() {});
it('should exist', function() {
expect(!!ctrl).toBe(true);
});
it('should ...', function() {
// do something
});
});
当我运行测试时,出现以下错误:
Unknown provider: exampleDataProvider <- exampleData <- ExampleCtrl
我的问题是:如何测试resolve
中的ExampleCtrl
,我该怎么办? ExampleService.get()
是一个服务,它会调用$http
并返回对象数组。
答案 0 :(得分:0)
ERROR 1170 (42000): BLOB/TEXT column 'name' used in key specification without a key length
的{{1}}方法测试不是您想要做的。它是角度的一部分,它有适当的测试。
您应该在测试中关注的是您的应用程序的逻辑。应该有一个部分用于测试resolve
($state
返回一个承诺,ExampleService
发出一个http请求等)并测试get
,这应该确保控制器进程数据正常。但解决依赖关系不是应该测试的。
在这种情况下,imo应该是解决方案的替代get
为了测试而解决。
ExampleCtrl
答案 1 :(得分:0)
您需要手动实例化示例数据。我遇到了同样的问题,所以我使用此方法来解决它。对你也会很好。
describe('Controller: ExampleCtrl', function() {
beforeEach(module('myModule'));
var ctrl,exampleData;
beforeEach(inject(function($controller,ExampleService) {
exampleData = ExampleService.get();
ctrl = $controller('ExampleCtrl',{exampleData});
}));
describe('initialization', function() {
beforeEach(function() {});
it('should exist', function() {
expect(!!ctrl).toBe(true);
});
it('should ...', function() {
// do something
});
});