如何解决测试中的Renderer2,RendererFactory2失败-TypeError:无法读取未定义的属性'createElement'
我在angular 9应用程序中有一个首选项服务,该应用程序使用Renderer2中的'createElement'创建了一个脚本标签。 当我尝试模拟Renderer2时,无法识别createElement。
这是我的服务。
@Injectable()
export class MyServer {
private renderer: Renderer2;
constructor(
//....
rendererFactory: RendererFactory2) {
this.renderer = rendererFactory.createRenderer(null,null);
}
public createScript() {
if (isLoginPage) {
const script = this.renderer.createElement('script');
script.type = 'text/javascript';
script.src = 'urlScript';
this.renderer.appendChild(document.body,script);
}
}
}
这是我的service.spec.ts: describe('MyServer',()=> {
describe('creerScriptTag',() => {
beforeEach(() => Testbed.configureTestingModule({
declarations: [],imports: [],providers: [
MyServer,ConfigurationService,{ provide: ModelService,useClass: ModelMockService },Renderer2
]
}
));
it('isLogin True verify that the script was created',inject([ConfigurationService,MyServer],(configurationService: ConfigurationService,myServer: MyServer,renderer2: Renderer2) => {
spyOn(configurationService,'getConfig').and.returnValue('anyString');
myServer.createScript();
expect(renderer2.createElement).toHaveBeenCalledTimes(1);
})
);
});
运行测试时出现此错误 TypeError:无法读取未定义的属性'createElement'
任何想法,
解决方法
我通过创建一个包含我需要的元素的const来解决了这个问题,然后监视RendererFactory2以返回我创建的const:
// create the const
const render2 = {createElement: jasmine.createSpy('createElement'),appendChild:
jasmine.createSpy('appendChild')};
//mock of RendererFactory2 return the const
beforeEach(() => {
spyOn(TestBed.get(RendererFactory2),'createRenderer').and.returnValue(render2);
}
);
// I use the render2 const as it's my Renderer2
expect(render2.appendChild).toHaveBeenCalled();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。