错误:模块“DynamicTestModule”导入了意外的值“CookieService”。请添加@NgModule 注释

Posted

技术标签:

【中文标题】错误:模块“DynamicTestModule”导入了意外的值“CookieService”。请添加@NgModule 注释【英文标题】:Error: Unexpected value 'CookieService' imported by the module 'DynamicTestModule'. Please add an @NgModule annotation 【发布时间】:2021-10-07 10:59:21 【问题描述】:

我正在尝试使用 jasmine 测试服务,但出现此错误:

错误:模块“DynamicTestModule”导入了意外的值“CookieService”。请添加@NgModule 注解。

错误:预期未定义是真实的。

我的规格文件:

import  RouterTestingModule  from '@angular/router/testing';
import  TestBed  from '@angular/core/testing';
import  Api  from './api.service';
import  HttpClientTestingModule, HttpTestingController  from '@angular/common/http/testing';
import  CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA, Inject, Injectable  from '@angular/core';
import  CookieService  from 'ngx-cookie';

fdescribe('ApiService', () => 
  let service: Api;
  let httpMock: HttpTestingController;

  beforeEach(() => 
    TestBed.configureTestingModule(
      providers: [
        Api,

      ],
      imports: [
        HttpClientTestingModule,
        RouterTestingModule,
        CookieService
      ],
      schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA],
    );
  );

  beforeEach(() => 
    service = TestBed.inject(Api);
    httpMock = TestBed.inject(HttpTestingController);
  );

  it('should be created', () => 
    expect(service).toBeTruthy();
  );

);

【问题讨论】:

【参考方案1】:

此错误消息显示为CookieServie 不是NgModule

错误:模块“DynamicTestModule”导入了意外的值“CookieService”。请添加@NgModule 注解。

作为Ngx-Cookie documentation,

将 cookie 服务作为提供者添加到您的 app.module.ts:


解决方案

您必须从 imports 部分中删除 CookieService 并将其添加到 providers 部分中。

.spec.ts

TestBed.configureTestingModule(
  providers: [
    Api,
    CookieService
 ],
 imports: [
   HttpClientTestingModule,
   RouterTestingModule
 ],
 schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA],
);

Sample solution on StackBlitz

【讨论】:

很好,但是我有一个新问题 XD,这是:NullInjectorError: R3InjectorError(DynamicTestModule)[Api -> CookieService -> CookieOptionsProvider -> CookieOptionsProvider]: NullInjectorError: No provider for CookieOptionsProvider! 您需要将CookieModule.forRoot() 添加到imports 部分。你可以参考这个GitHub issue。

以上是关于错误:模块“DynamicTestModule”导入了意外的值“CookieService”。请添加@NgModule 注释的主要内容,如果未能解决你的问题,请参考以下文章

模块“DynamicTestModule”导入的意外值“DecoratorFactory” - karma-jasmine

Angular 2.0.0 - 测试“由模块'DynamicTestModule'导入”

失败:模块“DynamicTestModule”导入的意外指令“ContactDetailsComponent”。请添加@NgModule 注释

角度单元测试:失败:模块“DynamicTestModule”导入的意外值“DxTemplateHost”:添加@NgModule 注释

jasmine-karma 中的模块“DynamicTestModule”导入的意外值“未定义”

模块'DynamicTestModule'导入的意外值'DecoratorFactory'。请添加@NgModule注释