typescript - 如何在服务中注入(inject)Document?

标签 typescript angular

我有一个 Angular 2 应用程序。为了在测试中模拟 Document 对象,我想将它注入(inject)到服务中,例如:

import { Document } from '??' 

@Injectable()
export class MyService {
  constructor(document: Document) {}
}

Angular 的Title 服务uses the internal getDOM() method .

有什么简单的方法可以将 Document 注入(inject)到服务中吗?另外,我应该如何在 providers 数组中引用它?

最佳答案

Angular 已经支持了一段时间。

您可以使用 DOCUMENT @angular/common 包提供的常量。

DOCUMENT 常量的描述(取自 API documentation ):

A DI Token representing the main rendering context. In a browser, this is the DOM Document.

示例如下:

我的服务.service.ts:

import { Inject, Injectable } from '@angular/core';
import { DOCUMENT } from '@angular/common';

@Injectable()
export class MyService {
  constructor(@Inject(DOCUMENT) private document: Document) {}
}

我的服务.service.spec.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
  ]));

  ...
});

关于typescript - 如何在服务中注入(inject)Document?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37521298/

相关文章:

javascript - 键盘事件 : Property 'value' does not exist on type 'EventTarget'

javascript - TS2741 类型 '{ 标签 : string; } Javascript 中缺少属性 '0'

javascript - 如何使用 vscode 设置 jest typescripts 测试以在 Debug模式下运行

typescript - Jest expect 不会从异步等待函数中捕获抛出

angular - 属性然后在类型 void 上不存在, typescript 错误

Angular2 选择默认第一个选项

javascript - 将应用程序从 Angular 5 更新到 Angular 8 会导致样式问题

javascript - 谷歌地图在 Ionic 2 应用程序中不起作用

javascript - 跳过 NULL 并在下拉列表中仅显示唯一值

angular - 按顺序执行多个异步路由守卫