我有一个Angular 2应用程序.为了在测试中模拟Document个对象,我想将其注入服务,如下所示:

import { Document } from '??' 

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

uses the internal getDOM() methodTitle次发球.

有没有简单的方法将Document注入服务?另外,我应该如何在providers数组中引用它?

推荐答案

Angular支持这一点已有一段时间了.

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

DOCUMENT常数的说明(取自API documentation):

表示主呈现上下文的DI标记.在浏览器中,这是DOM文档.

示例如下所示:

我的服务.服务ts:

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

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

我的服务.服务规格

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相关问答推荐

Typescript自定义键映射

如何使用TypScript和react-hook-form在Next.js 14中创建通用表单组件?

如何推断类方法未知返回类型并在属性中使用它

更新:Typescript实用程序函数合并对象键路径

我用相同的Redux—Toolkit查询同时呈现两个不同的组件,但使用不同的参数

TypeScript Page Routing在单击时不呈现子页面(React Router v6)

Next.js错误:不变:页面未生成

Express Yup显示所有字段的所有错误

如何表示多层深度的泛型类型数组?

为什么有条件渲染会导致material 自动完成中出现奇怪的动画?

<;T扩展布尔值>;

创建Angular 为17的动态形状时出错

带投掷的收窄类型

打印脚本中正则函数和函数表达式的不同类型缩小行为

TypeScrip:如何缩小具有联合类型属性的对象

打字脚本错误:`不扩展[Type]`,而不是直接使用`[Type]`

顶点堆叠的图表条形图未在正确的x轴上显示

仅当类型为联合类型时映射属性类型

Typescript 是否可以区分泛型参数 void?

具有枚举泛型类型的 Typescript 对象数组