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 注释。”的主要内容,如果未能解决你的问题,请参考以下文章

包括put方法的角度服务的测试用例

使用 jasmin 使用带有 async/await 的 $httpBackend 测试角度服务

JS for循环实现 My cats are called Bill, Jeff, Pete, Biggles, and Jasmin.

Angular 2 业力设置问题——业力启动但不运行测试

对铬的业力测试

业力覆盖总是空的