【发布时间】:2019-06-19 14:04:58
【问题描述】:
下面是我正在使用的代码,但是这个测试用例失败了
//test case
it('should display default image if the image link in people finder result doesnot exist', fakeAsync(() => {
debugger
component.resultsItem = MOCK_RESULTSET.results[9];
component.resultsItem.imageUrl = "https://domain/gxc3/files/Employee_Images/Test.jpg";
fixture.detectChanges();
tick(3000);
el = fixture.debugElement.queryAll(By.css('.item-person-type'))[0].nativeElement;
console.log(el);
let src = el.getAttribute('src');
expect(src).toBe("assets/img/user-icon.jpg");
}));
//image tag
<img class='item-person-type' title="{{resultsItem.text}}"
[src]="resultsItem.imageUrl ? resultsItem.imageUrl : 'assets/img/user-icon.jpg'"
(click)="onResultLinkClick(resultsItem)"
(error)="getImageUrl()" />
//component function
getImageUrl() {
try {
var gxcUrl: string = this.resultsItem.imageUrl;
this.resultsItem.imageUrl = 'assets/img/user-icon.jpg';
var extensions = this._appSettingsService.appSettings.probableGxcImageExtensions;
var imageExists = false;
var probableImageUrls = [];
extensions.forEach(function (extension) {
let probableImageUrl = gxcUrl.replace(".jpg", extension);
probableImageUrls.push(probableImageUrl);
})
let observables = probableImageUrls.map(probableImageUrl => this.checkImage(probableImageUrl))
let source = Observable.forkJoin(observables);
source.subscribe(response => {
for (var i = 0; i < response.length; ++i) {
if (response[i]) {
imageExists = true;
this.resultsItem.imageUrl = probableImageUrls[i];
break;
}
}
if (!imageExists) {
this.resultsItem.imageUrl = 'assets/img/user-icon.jpg';
}
});
}
catch (e) {
this.resultsItem.imageUrl = 'assets/img/user-icon.jpg';
}
}
checkImage(src): Observable<Boolean> {
return Observable.create((observer: Observer<boolean>) => {
let img = new Image();
// img.crossOrigin = 'Anonymous';
img.src = src;
if (!img.complete) {
img.onload = () => {
observer.next(true);
observer.complete();
};
img.onerror = (err) => {
observer.next(false);
observer.complete();
};
} else {
observer.next(true);
observer.complete();
}
});
};
只要图像没有加载,getImageUrl 方法就会被调用,它会替换当前图像 (.jpg) 源的扩展名,如果找不到任何图像,则使用不同的扩展名(如 .png 或 .jpeg)再次搜索它的扩展名然后显示默认图像。
【问题讨论】:
-
您需要了解依赖注入这一行代码
let img = new Image();阻止您测试与该img对象相关的任何内容,如果您希望能够测试它,您需要提供工厂为您创建图像,然后您将能够使用模拟工厂对象对其进行测试,该对象将返回您监视的模拟图像对象
标签: angular typescript unit-testing jasmine