在单元测试用例中模拟Angular $window
Mocking Angular $window in unit test cases
我一直在尝试对用Typescript编写的angular自定义服务进行单元测试。该服务读取定义在Window对象上的全局变量。我已经做出了承诺,以便将来我可以通过AJAX调用来获取这些信息。以下是我的精简服务:-
export class ProxyDetectiveService {
public static $inject = [
$window,
$q
];
constructor(private $window:ng.IWindowService,
private $q:ng.IQService) {
}
public getProxyUserObject = ():ng.IPromise<any> => {
this.log.debug('Proxy User Service called, to get proxy user details');
var deferred = this.$q.defer();
var proxyDetails = this.$window.portalObject;
deferred.resolve(proxyDetails);
return deferred.promise;
};
}
我的单元测试案例:-
describe('Proxy Detective Service - Unit Test Cases', () => {
var proxyDetectiveService:any,
$window:ng.IWindowService;
beforeEach(() => {
module('myApp');
});
beforeEach(inject(($injector:ng.auto.IInjectorService, _$window_) => {
proxyDetectiveService = $injector.get('ProxyDetectiveService');
_$window_ = {
portalObject: {
proxyUserDetails: {
firstName: 'testFN',
lastName: 'testLN'
}
}
};
}));
it('should have proxy object defined', function () {
var promise = proxyDetectiveService.getProxyUserObject();
promise.then(function (response) {
expect(response).toBeDefined();
}).catch(function (response) {
expect(response).toBeUndefined();
});
});
});
以下是我的问题:-
我的测试用例得到执行,但我没有在服务中看到模拟窗口对象?
我的承诺然后或捕获子句永远不会被执行?
有没有更好的方法来实现我的服务?我的目的是返回一个承诺,在未来我可能会使用AJAX调用。
您需要使用$provide
在单元测试中提供模拟值:
beforeEach(() => {
module('myApp', ($provide) => {
$provide.value('$window', myMockedWindowObject)
});
});
您还需要调用$rootScope.$apply()
来在单元测试中移动承诺。
相关文章:
- 注入$window在angular,有什么用
- GAE/Angular应用程序中window.init()上的无限循环
- Angular Js中的$window.location成功消息
- $window错误'$窗口未定义'Angular应用程序中的谷歌分析代码
- 我如何在angular($window).bind()中访问它
- 当作为 CommonJS 模块加载时,Angular 是否全局将自己分配给“window.angular”
- “window.angular is undefined.” 当使用量角器进行自动测试时
- Safari在Angular的$window.localStorage.setItem上循环
- 无法对使用 $window 的 Angular 指令进行单元测试
- Authorization for window.location.href call in angular js
- 函数未在 window.plugins in Angular/Ionic 中运行
- Angular $window.scrollTo()不起作用
- Angular window.onbeforeunload
- window.location美元.href (angular.js:12520 TypeError: Cannot s
- 如何在ui-gmap-window中使用Angular指令
- 如何使用href="javascript:window.open. "在Angular JS中
- 测试Angular $window.location.卡玛
- 为什么这个对象在angular http承诺对象中是$window ?
- 如何使用angular$window对象访问全局javascript方法
- 在单元测试用例中模拟Angular $window