我该如何测试依赖于DomSanitizer的管道?

鲁姆斯卡托菲尔

Angular版本:8.1.2
测试工具:Karma和Jasmine,已预先安装ng new

我目前正在从事我的第一个Angular项目。作为其一部分,我创建了一个调用的管道DomSanitizer.bypassSecurityTrustResourceUrl我这样做是为了能够在iframe中使用它们。我现在要对此管道实施测试。这是它的代码:

import { Pipe, PipeTransform } from '@angular/core';
import { DomSanitizer, SafeResourceUrl } from "@angular/platform-browser";

@Pipe({
  name: 'safe'
})
export class SafeResourceUrlPipe implements PipeTransform {

  constructor(private sanitizer: DomSanitizer) { }

  transform(url: string): SafeResourceUrl | string {
    return this.sanitizer.bypassSecurityTrustResourceUrl(url);
  }

}

自动生成的规格文件仅如下所示:

import { TestBed, async } from '@angular/core/testing';
import { SafeResourceUrlPipe } from './safe-resource-url.pipe';
import { DomSanitizer } from '@angular/platform-browser';

describe('Pipe: SafeResourceUrle', () => {
  it('should create an instance', () => {
    let pipe = new SafeResourceUrlPipe();
    expect(pipe).toBeTruthy();
  });
});

VSCode在我进行测试之前就告诉我这是行不通的,因为SafeResourceUrlPipe的构造函数需要一个参数。到目前为止很好,但是我不知道现在该怎么办。我不能只使用new DomSanitizer,因为它是一个抽象类。

我尝试过的是创建一个实现DomSanitizer的模拟类,但是这样做除了测试管道是否已创建外,我所做的工作不多,而且我早就知道了。我想测试的是它是否正确地完成了输入转换的工作,但是当我伪实现主要依赖项时,我几乎无法测试。

我已经对此进行了一些Google搜索,但我怀疑它会变得很明显,但我找不到它。

詹姆士

我建议使用Angular Testbed注入类似dom消毒剂的模拟物。

beforeEach(async(() => {
    TestBed.configureTestingModule({
      declarations: [SafeResourceUrlPipe],
      providers: [
           SafeResourceUrlPipe,
          { provide: DomSanitizer, useValue: {bypassSecurityTrustResourceUrl(){}}
     ]
    });
  }));

然后

describe('Pipe: SafeResourceUrle', () => {
  it('should create an instance', () => {
    let pipe = TestBed.get(SafeResourceUrlPipe);
    expect(pipe).toBeTruthy();
  });
});

ps在useValue这里很重要。如果您仅在此处提供值,则可以。如果要用一个完整的模拟类替换它,则必须useClass(大多数人卡住的小地方)

export class MockDomSanitizer {
    bypassSecurityTrustResourceUrl() {}
    otherMethods(){}
}

这应该允许您使用模拟的dom消毒程序方法来运行管道。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何测试依赖于库的代码?

如何测试依赖于硬件的功能?

`Company` 类依赖于 `Address`,我该如何描述这种依赖关系?

我该如何编写依赖于教义并提供实体的symfony捆绑包?

Azure管道:如何使任务依赖于先前的任务?

当我的JavaScript依赖于先前加载的脚本中的对象时,我该如何“保留”我的JavaScript?

如何(py)测试依赖于当前时间的函数?

如何测试依赖于useContext钩子的react组件?

如何使用依赖于插件的代码运行测试?

如何测试依赖于环境变量的Rust方法?

如何测试依赖于包含 BehaviorSubject 的服务的 Angular 组件?

我如何生成依赖于其前辈的例程?

如何让我的 AJAX url 依赖于 jquery 条件?

当状态之间的转换同时依赖于多个动作时,我该如何采取动作和状态?

如何测试依赖于另一个服务(又依赖于Http服务)的服务/组件?

编写依赖于IntersectionObserver调用的测试

FsCheck:如何生成依赖于其他测试数据的测试数据?

如何对依赖于springBoot applicationContext的单元测试方法进行单元测试?

如何测试依赖于先前测试通过的 AngularJS 服务?

如何使依赖于先前函数数据的函数等到设置该数据

如何遍历对象数组以返回依赖于该对象内相应属性的属性?

如何创建依赖于输出的sliderInput?

功能测试依赖于要测试的工具?

使TestNG测试依赖于成功完成的测试

如何使用ui-router测试依赖于服务的AngularJS控制器?

如何运行依赖于Android库模块的单元测试?

当processElement依赖于广播的数据时,如何在flink中对BroadcastProcessFunction进行单元测试

如何对依赖于 redux props 的组件进行单元测试

如何使用JUnit测试依赖于环境变量的代码?