gpt4 book ai didi

javascript - 如何对服务中调用的过滤器进行单元测试

转载 作者:行者123 更新时间:2023-11-29 16:09:45 27 4
gpt4 key购买 nike

我无法断言在返回 promise 后调用了我的过滤器。

此代码从 Controller 调用,然后 Controller 从 http GET 服务中提取数据以进行过滤:

getPermissions(){
return this.DataService.getPermissionsLOV().then((data) => {
return this.$filter('chunkCollection')(data, 3);
});
}

我的测试用例是这样的:

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);

});

断言 expect(resp).toEqual(mockData); 失败,因为响应被 chunkCollection 过滤,但我不知道如何测试对 $过滤器?

我已经单独测试了过滤器本身,所以知道它正在工作,并且 karma 告诉我它在报告上述断言失败时正在转换数据。

最佳答案

我认为您的问题实际上是如何模拟过滤器。您可以只添加一个 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);

});

mockChunkCollectionFilter 就像您的其他 spy 一样工作。

关于javascript - 如何对服务中调用的过滤器进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31979169/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com