#angular #jasmine #karma-jasmine #angular-renderer2
#angular #jasmine #карма-жасмин #angular-renderer2
Вопрос:
У меня есть служба настроек в приложении angular 9, которая создает тег сценария, в котором используется ‘createElement’ из Renderer2. Когда я пытаюсь издеваться над Renderer2, createElement не распознается.
Это мой service.ts :
@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);
})
);
});
Когда я запускаю тест, я получил эту ошибку Ошибка типа: не удается прочитать свойство ‘createElement’ неопределенного
Любая идея, пожалуйста,
Ответ №1:
Я решил это, создав const, содержащий элемент, который мне нужен, и я отслеживаю RendererFactory2, чтобы вернуть созданную мной константу :
// 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();