Raj*_*Raj 4 javascript unit-testing jasmine angularjs typescript
我一直在尝试对使用Typescript编写的角度自定义服务进行单元测试.该服务读取在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;
};
}
Run Code Online (Sandbox Code Playgroud)
我的单位测试案例: -
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();
});
});
});
Run Code Online (Sandbox Code Playgroud)
以下是我的问题: -
我的测试用例被执行了,但我没有看到服务中的模拟窗口对象?
我的承诺then或catch子句永远不会被执行?
有没有更好的方法来实现我的服务?我的意图是返回一个承诺,将来我可能会使用AJAX调用.
您需要使用$provide在单元测试中提供模拟值:
beforeEach(() => {
module('myApp', ($provide) => {
$provide.value('$window', myMockedWindowObject)
});
});
Run Code Online (Sandbox Code Playgroud)
您还需要致电$rootScope.$apply()在单元测试中转发承诺.
| 归档时间: |
|
| 查看次数: |
758 次 |
| 最近记录: |