DomSanitizer
依存関係を持つコンポーネントを作成(インスタンス化)する単体テストでは、この依存関係をどのようにモック/スタブしますか?
DomSanitizer
はAbstract
クラスであるため、bypassSecurityTrustHtml
のメソッドシグネチャが実際にはどのように見えるかわかりません。
また、モック/スタブDomSanitizer
を意図していない場合は、実際の実装を抽象クラスに挿入するためにどのようにすればよいでしょうか?
コンポーネントの実際のステートメントは次のようになります。
this.trustedString = <string>this.domSanitizer.bypassSecurityTrustHtml(trustedHTML);
TestBed
セットアップは次のようになります。
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
BrowserModule,
// other modules
],
providers: [
{
provide: DomSanitizer,
useValue: {
bypassSecurityTrustHtml: () => 'safeString'
}
},
// more providers
],
declarations: [ TheComponent ],
schemas: [ NO_ERRORS_SCHEMA ]
})
.compileComponents();
}));
Chrome(ヘッドレスではない))でKarmaで発生している特定のエラーは次のとおりです。
TypeError: view.root.sanitizer.sanitize is not a function
エラープロパティ:Object({ngDebugContext:DebugContext _({view:Object({def:Object({factory:Function、nodeFlags:16793601、rootNodeFlags:1、nodeMatchedQueries:0、flags:0、nodes:[Object({nodeIndex:0 、親:null、renderParent:null、bindingIndex:0、outputIndex:0、checkIndex:0、flags:1、childFlags:16793601、directChildFlags:16777217、childMatchedQueries:0、matchedQueries:Object({})、matchedQueryIds:0、参照:Object({})、ngContentIndex:null、childCount:5、bindings:[]、bindingFlags:0、outputs:[]、element:Object({ns:null、name:null、attrs:[]、template:null 、componentProvider:null、componentView:null、componentRendererType:null、publicProviders:null({})、allProviders:null({})、handleEvent:Function})、provider:null、text:null、query:null、ngContent:null })、Object({nodeIndex:1、parent:Object({nodeIndex:0、parent:null、renderParent:null、bindingIndex:0、outputIndex:0、checkIndex:0、flags:1、childFlags:16793601、directChildFlag s:16777217 ... at at setElementProperty(webpack:///./node_modules/@angular/core/fesm5/core.js?:8237:61)at checkAndUpdateElementValue(webpack:///./node_modules/@angular/ core/fesm5/core.js?:8189:13)at checkAndUpdateElementInline(webpack:///./node_modules/@angular/core/fesm5/core.js?:8136:24)at checkAndUpdateNodeInline(webpack:///。 /node_modules/@angular/core/fesm5/core.js?:10477:20)at checkAndUpdateNode(webpack:///./node_modules/@angular/core/fesm5/core.js?:10443:16)at debugCheckAndUpdateNode( webpack:///./node_modules/@angular/core/fesm5/core.js?:11076:38)at debugCheckRenderNodeFn(webpack:///./node_modules/@angular/core/fesm5/core.js?:11062 :13)at Object.eval [as updateRenderer](ng:///DynamicTestModule/ConversationMessageComponent.ngfactory.js:84:5)at Object.debugUpdateRenderer [as updateRenderer](webpack:///./node_modules/@angular/ core/fesm5/core.js?:11054:21)at checkAndUpdateView(webpack:///./node_modules/@angular/core/fesm5/core.js?:10430:14)
回避策として、sanitize: () => 'safeString',
を追加してみてください
...
useValue: {
sanitize: () => 'safeString',
bypassSecurityTrustHtml: () => 'safeString'
}
...