Rya*_*P13 2 javascript filter spy jasmine angularjs
我无法断言我的过滤器已在返回承诺后被调用.
从控制器调用此代码,然后控制器从http GET服务中提取数据以进行过滤:
getPermissions(){
return this.DataService.getPermissionsLOV().then((data) => {
return this.$filter('chunkCollection')(data, 3);
});
}
Run Code Online (Sandbox Code Playgroud)
我的测试用例看起来像这样:
it('should get the permissions', () => {
spyOn(service, 'getPermissions').and.callThrough();
spyOn(DataService, 'getPermissionsLOV').and.callFake(function(){
var defer = this.$q.defer();
defer.resolve(mockData);
return defer.promise;
});
let resp;
service.getPermissions().then((data) => {
resp = data;
});
scope.$digest();
expect(service.getPermissions).toHaveBeenCalled();
expect(DataService.getPermissionsLOV).toHaveBeenCalled();
expect(resp).toEqual(mockData);
});
Run Code Online (Sandbox Code Playgroud)
断言expect(resp).toEqual(mockData);失败,因为响应被过滤chunkCollection但我不知道如何测试此调用$filter?
我已经单独测试过滤器本身,所以知道它正在工作,业力告诉我它在报告上述断言的失败时正在转换数据.
我认为你的问题是如何模拟过滤器.您可以beforeEach在测试之前添加并提供过滤器.
var mockChunkCollectionFilter = jasmine.createSpy('chunkCollectionFilter');
beforeEach(module(function($provide) {
$provide.value('chunkCollectionFilter', mockChunkCollectionFilter);
}));
it('should get the permissions', () => {
spyOn(service, 'getPermissions').and.callThrough();
spyOn(DataService, 'getPermissionsLOV').and.callFake(function(){
var defer = this.$q.defer();
defer.resolve(mockData);
return defer.promise;
});
mockChunkCollectionFilter.and.callFake(function (data, chunks) {
// Ignore chunks since that's what the test expects.
return data;
});
let resp;
service.getPermissions().then((data) => {
resp = data;
});
scope.$digest();
expect(service.getPermissions).toHaveBeenCalled();
expect(mockChunkCollectionFilter).toHaveBeenCalled();
expect(DataService.getPermissionsLOV).toHaveBeenCalled();
expect(resp).toEqual(mockData);
});
Run Code Online (Sandbox Code Playgroud)
mockChunkCollectionFilter 像你的其他间谍一样工作.
| 归档时间: |
|
| 查看次数: |
1848 次 |
| 最近记录: |