我们如何模拟我们的服务来测试控制器
How do we mock our services to test the controller?
我是angular js的新手,正在尝试测试控制器。
我有这样的服务:
angular.module('test'){
service.getAllServices = function()
{
var fullPath = url
var deferred = $q.defer()
if(!$.isEmptyObject(service.allServices))
deferred.resolve(service.allServices)
else
$http.get(fullPath)
.success(function(data,status,headers,config){
service.allServices = data
deferred.resolve(service.allServices)
})
.error(deferred.object)
return deferred.promise;
}
})
控制器看起来是这样的:
angular.module('test')
.controller('MainCtrl', function ($scope,$http,HttpService) {
$scope.awesomeThings = [
"Loading"
];
$scope.loadServices = function()
{
HttpService.getAllServices().then(function(result){
// console.log("Success")
$scope.awesomeThings = result.entities
},function(reason){
console.log(reason)
})
};
我有一个这样的测试用例:
describe('Testing controller', function () {
// load the controller's module
beforeEach(module('test'));
var MainCtrl,
scope;
// Initialize the controller and a mock scope
beforeEach(inject(function ($controller, $rootScope,$q,HttpService) {
scope = $rootScope.$new();
var deferred = $q.defer();
var response = {
things: 'and stuff'
}
deferred.resolve(response);
spyOn(HttpService, 'getAllServices').andReturn(deferred.promise);
MainCtrl = $controller('MainCtrl', {
$scope: scope,
HttpService : HttpService
});
scope.loadServices();
}));
it('Controller is dummy, just gives back, what services gives back', function () {
expect(scope.awesomeThings).toEqual({
things: 'and stuff'
});
});
});
即使我正在注入deferred
对象,看起来我的测试用例仍然失败,并显示以下消息:
Expected [ 'Loading' ] to equal { things : 'and stuff' }.
我哪里搞错了?
您需要调用digest来强制运行promise成功函数。你可以在测试中完成,也可以在调用loadServices后的设置中完成,比如:
scope.loadServices();
scope.$digest();
希望这能有所帮助。
相关文章:
- 如何使用WCF服务和javascript表单post上传.doc文件
- 监视函数从服务返回不起作用,但作用域函数起作用
- 通过Magento的网络服务检索运费
- 在同一个服务工作者中处理service-worker.js有任何影响吗
- 在Highcharts中,我们可以通过任何方式在渲染图表之前获得plotWidth和plotHeight
- 为什么不'我们在javascript中使用函数参数的数据类型
- 使用angular.js问题的JavaSpringREST服务
- AngularJS-需要在index.html页面中访问来自服务的数据
- 我们如何使用css或JavaScript在i/j上更改句点(点)的颜色
- 如何在Ionic2测试版中包含Ionic.io服务
- 基于api密钥的NodeJS web服务
- 我们如何在不更改url的情况下使用锚点点击从一个页面重定向到另一个页面
- 我们可以移除/删除控制器、服务、工厂、指令等吗?
- 为什么像Facebook,Disqus,Google,Twitter这样的服务告诉我们这一点
- 我们如何模拟我们的服务来测试控制器
- 为什么我们使用web服务的web方法,而不是web表单函数
- Javascript:为什么我们的网站在终端服务会话中非常慢?
- 我们如何在通用的web应用程序中包含alljoyn的基础服务
- 使用Famo调用web服务.我们的框架
- Web 服务 - JavaScript 我们应该尽可能共享函数或创建新函数