【问题标题】:Error: Unexpected value 'CookieService' imported by the module 'DynamicTestModule'. Please add an @NgModule annotation错误:模块“DynamicTestModule”导入了意外的值“CookieService”。请添加@NgModule 注释
【发布时间】: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();
  });

});

【问题讨论】:

    标签: angular typescript karma-jasmine ngx-cookie-service


    【解决方案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。
    猜你喜欢
    • 2018-05-24
    • 2020-12-27
    • 2019-02-06
    • 2022-10-13
    • 2020-05-07
    • 2019-07-12
    • 2017-10-23
    • 1970-01-01
    • 2023-03-12
    相关资源
    最近更新 更多