Angular 单元测试:如何对.map() 进行单元测试?
Angular Unit Test: How to unit test .map()?
我需要测试其中一种服务方法,但我不确定如何实现 运行 调用某些注入服务方法的部分代码的 100% 代码覆盖率。
待测服务方式:
@Injectable()
export class BomRevisiosnsService {
constructor(
private baseService: BaseService,
private appConstants: AppConstants,
private dmConstants: DMConstants
) { }
public getRevisionsData(): any {
var itemId = this.appConstants.userPreferences.modelData['basicDetails']['itemId'];
let url = this.dmConstants.URLs.GETBOMREVISIONS + itemId + "/GetRevisionsAsync";
let headers = {
"Content-Type": "application/json",
UserExecutionContext: JSON.stringify(this.appConstants.userPreferences.UserBasicDetails),
}
if (itemId != null || itemId != undefined) {
return this.baseService.getData(url, headers)
.map(response => {
// this area not getting covered.
return response;
});
}
}
}
如何覆盖:
.map(response => {
return response;
});
在以下内容中:
测试:
it('should return response if itemId is not null or undefined', () => {
let mockData = [1,2,3];
let mockObservable = Observable.of(mockData);
spyOn(baseService, 'getData').and.returnValue(mockObservable);
appConstants.userPreferences.modelData['basicDetails']['itemId']=4; // itemId not null or undefined
dMConstants.URLs.GETBOMREVISIONS ="dummy url";
subject.getRevisionsData();
expect(baseService.getData).toBe(mockData); // How do I test .map()?
});
it('should return response if itemId is not null or undefined', () => {
...
const spy = spyOn(baseService.getData).and.return(mockedData)// you need to define data returned by baseService.getData
const result = subject.getRevisionsData();
expect(spy).toHaveBeenCalled(); // How do I test .map()?
expect(result).toEqual(mockedData);// for simple map it will be the same thing that is returned for more complicated map it may differ
});
我需要测试其中一种服务方法,但我不确定如何实现 运行 调用某些注入服务方法的部分代码的 100% 代码覆盖率。
待测服务方式:
@Injectable()
export class BomRevisiosnsService {
constructor(
private baseService: BaseService,
private appConstants: AppConstants,
private dmConstants: DMConstants
) { }
public getRevisionsData(): any {
var itemId = this.appConstants.userPreferences.modelData['basicDetails']['itemId'];
let url = this.dmConstants.URLs.GETBOMREVISIONS + itemId + "/GetRevisionsAsync";
let headers = {
"Content-Type": "application/json",
UserExecutionContext: JSON.stringify(this.appConstants.userPreferences.UserBasicDetails),
}
if (itemId != null || itemId != undefined) {
return this.baseService.getData(url, headers)
.map(response => {
// this area not getting covered.
return response;
});
}
}
}
如何覆盖:
.map(response => {
return response;
});
在以下内容中:
测试:
it('should return response if itemId is not null or undefined', () => {
let mockData = [1,2,3];
let mockObservable = Observable.of(mockData);
spyOn(baseService, 'getData').and.returnValue(mockObservable);
appConstants.userPreferences.modelData['basicDetails']['itemId']=4; // itemId not null or undefined
dMConstants.URLs.GETBOMREVISIONS ="dummy url";
subject.getRevisionsData();
expect(baseService.getData).toBe(mockData); // How do I test .map()?
});
it('should return response if itemId is not null or undefined', () => {
...
const spy = spyOn(baseService.getData).and.return(mockedData)// you need to define data returned by baseService.getData
const result = subject.getRevisionsData();
expect(spy).toHaveBeenCalled(); // How do I test .map()?
expect(result).toEqual(mockedData);// for simple map it will be the same thing that is returned for more complicated map it may differ
});