Comment injecter un Document dans le service Angular 2
j'ai une application Angular2. Pour se moquer de la Document
objet dans les tests, je tiens à injecter au service de la forme:
import { Document } from '??'
@Injectable()
export class MyService {
constructor(document: Document) {}
}
Title
service angulaire utilise l'interne getDOM()
méthode:
Existe-t-il un moyen simple d'injecter le document dans le service? En outre, comment devrais-je faire référence dans les fournisseurs tableau?
3 réponses
ceci est directement supporté en angle depuis un certain temps
https://angular.io/api/common/DOCUMENT
mon service.ts:
import { Inject, Injectable } from '@angular/core';
import { DOCUMENT } from '@angular/common';
@Injectable()
export class MyService {
constructor(@Inject(DOCUMENT) private document: any) {}
}
mon service.specs.ts
import { provide } from '@angular/core';
import { DOCUMENT } from '@angular/common';
import { MyService } from './my-service';
class MockDocument {}
describe('MyService', () => {
beforeEachProviders(() => ([
provide(DOCUMENT, { useClass: MockDocument }),
MyService
]));
...
});
Blockquote @GünterZöchbauer il semble que le DOCUMENT est déprécié. Une idée de comment faire ça une fois que c'est parti? Par exemple, comment définir dynamiquement le favicon?
au lieu d'importer du navigateur de plate-forme comme ceci:
import { DOCUMENT } from '@angular/platform-browser';
Importer à partir angulaire de la commune:
import {DOCUMENT} from '@angular/common';
Angulaire de définir le DOCUMENT comme un InjectionToken
export const DOCUMENT = new InjectionToken<Document>('DocumentToken');
et l'injecter avec du document dans navigateur.ts
{provide: DOCUMENT, useFactory: _document, deps: []}
export function _document(): any {
return document;
}
par conséquent, lorsque nous les utilisons, nous avons juste besoin d'injecter @Inject(DOCUMENT)
ou utiliser le jeton directement dans deps:[DOCUMENT]