单元测试控制器中的$http解析
Unit testing $http resolve in controller
我的控制器测试需要帮助。我有一个使用ui路由器的resolve
。在我的测试中,我需要弄清楚如何处理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');
}
});
}]);
示例控制器.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
我的问题是:我该怎么做才能在我的ExampleCtrl
中测试resolve
?ExampleService.get()
是进行$http
调用并返回对象数组的服务。
测试$state
的resolve
方法不是你想要做的。它是angular的一部分,它有适当的测试。
你在测试中应该关注的是你的应用程序的逻辑。应该有一个部分用于测试ExampleService
(get
返回promise,get
发出http请求等)和测试ExampleCtrl
,以确保控制器正确处理数据。但解决依赖关系不是应该测试的。
在这种情况下,imo应该是替代exampleData
的解决方案,以便进行测试。
var exampleData = [
{id: 1, title:'something'},
{id: 2, title:'something'},
{id: 3, title:'something'}
];
module('myModule', function($provide) {
$provide.value('exampleData', exampleData);
});
beforeEach(inject(function($state) {
ctrl = $controller('ExampleCtrl');
}));
您需要手动实例化示例数据。我遇到了同样的问题,所以我用这个方法来解决它。对你来说也很好。
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
});
});
相关文章:
- 如何绑定“;这个“;在$http.post中->在AngularJS中解析/拒绝?(现在this=Window对象
- Angular$http然后解析_.each中的多个调用
- AngularJS或JQuery解析错误格式的JSON(http get)
- 无法解析来自 jquery 中成功的 HTTP HEAD 请求的标头
- HTTP 获取节点 JS 以使用文档元素进行解析
- 节点 http.get 解析 JSON 正文
- Meteor.js HTTP.get 获取 JSON 引号并解析结果似乎包含一个回调函数
- http.get 解析错误,代码:“HPE_UNEXPECTED_CONTENT_LENGTH”
- 从 HTTP 响应解析 JSON
- 无法使用 node.js http.request - MapperParsingException[未能解析]将记录插
- UI-router、解析$http未按文档工作
- AngularJS$http服务中的调用,返回解析的数据,而不是承诺
- 无法解析 $http.put();访问控制允许源
- 如何在节点中解析 HTTP 状态代码
- 正在重写Node.js HTTP解析器
- 如何解析http头的第一行
- XML Http响应不允许进行XML解析
- 单元测试控制器中的$http解析
- AngularJS 使用 $HTTP 解析 json 的问题.JSONP.
- 节点HTTP解析