Jasmin + 业力:“错误:模块 'DynamicTestModule' 导入的意外值 'HttpClient'。请添加 @NgModule 注释。”
Posted
技术标签:
【中文标题】Jasmin + 业力:“错误:模块 \'DynamicTestModule\' 导入的意外值 \'HttpClient\'。请添加 @NgModule 注释。”【英文标题】:Jasmin + karma: "Error: Unexpected value 'HttpClient' imported by the module 'DynamicTestModule'. Please add a @NgModule annotation."Jasmin + 业力:“错误:模块 'DynamicTestModule' 导入的意外值 'HttpClient'。请添加 @NgModule 注释。” 【发布时间】:2019-02-06 13:51:12 【问题描述】:我使用 jasmine 作为测试框架,使用 karma 作为测试运行器。我正在尝试创建一个 HttpClient 对象,以便我可以创建一个作为该对象依赖的服务:
TestBed.configureTestingModule(
declarations: [HttpClient],
imports: [HttpClient],
providers: [HttpClient]
);
TestBed.get(HttpClient);
但我收到以下错误:
错误:模块“DynamicTestModule”导入了意外的值“HttpClient”。请添加@NgModule 注解。
有人知道如何解决这个问题吗?
遵循所有代码:
import I18nService from "../../services/i18n.service";
import TestBed, inject, async from "@angular/core/testing";
import EditionHistoryEventsModel from "./dropdown.edition.history.events.model";
import HttpClient from "@angular/common/http";
import TestUtil from "../../utils/test.uti";
describe('DropDownEditionHistoryItemModel', () =>
let i18nService: I18nService;
beforeAll(() =>
TestBed.configureTestingModule(
declarations: [HttpClient],
imports: [HttpClient],
providers: [HttpClient]
);
i18nService = TestUtil.geti18nService(TestBed.get(HttpClient));
);
it('asdasd', () =>
let model: EditionHistoryEventsModel = new EditionHistoryEventsModel(i18nService);
expect(true).toBeTruthy();
);
);
【问题讨论】:
【参考方案1】:当您尝试在 declarations
数组中包含组件、指令或管道以外的其他内容时,将引发编译错误。
我已经重构了您的测试规范以从声明模块中删除HttpClient
,导入HttpClientTestingModule
,因为它比testing 的HttpClientModule
具有一些显着优势,并使用稍微不同的模式来创建I18nService
的一个实例传递给你的模型类。
import HttpClientTestingModule from '@angular/common/http/testing';
describe('TestSpec', () =>
let intlService = I18nService;
beforeAll(() =>
TestBed.configureTestingModule(
declarations: [],
imports: [HttpClientTestingModule],
providers: [I18nService]
);
i18nService = TestBed.Get(I18nService);
);
【讨论】:
【参考方案2】:在我的情况下,当我导入覆盖模块时错误解决了
import OverlayModule from '@angular/cdk/overlay';
...
beforeAll(() =>
TestBed.configureTestingModule(
declarations: [...],
imports: [OverlayModule],
providers: [...]
);
【讨论】:
【参考方案3】:你必须在你的模块文件中导入 HttpClientModule
import HttpClientModule from '@angular/common/http';
【讨论】:
以上是关于Jasmin + 业力:“错误:模块 'DynamicTestModule' 导入的意外值 'HttpClient'。请添加 @NgModule 注释。”的主要内容,如果未能解决你的问题,请参考以下文章
使用 jasmin 使用带有 async/await 的 $httpBackend 测试角度服务
JS for循环实现 My cats are called Bill, Jeff, Pete, Biggles, and Jasmin.