单元测试茉莉花@NGRX/DATA

Posted

技术标签:

【中文标题】单元测试茉莉花@NGRX/DATA【英文标题】:UNIT TEST JASMINE @NGRX/DATA 【发布时间】:2020-11-25 11:19:08 【问题描述】:

我正在尝试使用 @ngrx/data 为我的 Angular 项目编写单元测试!我收到错误

失败:模块“DynamicTestModule”导入了意外的值“EntityCollectionServiceBase”。请添加@NgModule 注解。

NullInjectorError: R3InjectorError(DynamicTestModule)[CalendarService -> EntityCollectionServiceElementsFactory -> EntityCollectionServiceElementsFactory]: NullInjectorError: 没有提供 EntityCollectionServiceElement

服务

import  Injectable  from '@angular/core';
import  Observable  from 'rxjs';
import  Appointment  from '../models/appointment';
import 
  EntityCollectionServiceBase,
  EntityCollectionServiceElementsFactory
 from '@ngrx/data';

@Injectable(
  providedIn: 'root'
)
export class CalendarService extends EntityCollectionServiceBase<Appointment> 
  calendar$: Observable<Appointment>;
  constructor(serviceElementsFactory: EntityCollectionServiceElementsFactory) 
    super('Appointment', serviceElementsFactory);
  


测试文件



import  TestBed, async  from '@angular/core/testing';
import  StoreModule, Store  from '@ngrx/store';
import  CalendarService  from './calendar.service';
import  EntityDataModule  from '@ngrx/data';
import  entityConfig  from '../entity-metadata';
import 
  EntityCollectionServiceBase,
  EntityCollectionServiceElementsFactory
 from '@ngrx/data';

describe('CalendarService', () => 
  let service: CalendarService;

  beforeEach(async(() => 
    TestBed.configureTestingModule(
      imports: [
        StoreModule.forRoot(),
        EntityCollectionServiceBase,
        EntityCollectionServiceElementsFactory
      ],
      declarations: [],
      providers: [EntityDataModule.forRoot(entityConfig)]
    ).compileComponents();

    service = TestBed.inject(CalendarService);
  ));

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

【问题讨论】:

EntityCollectionServiceBaseEntityCollectionServiceElementsFactory 添加到提供者而不是导入中 并将EntityDataModule.forRoot(entityConfig) 移动到imports 数组中。 【参考方案1】:

这是我的设置

beforeEach(async () => 
    await TestBed.configureTestingModule(
      imports: [
        StoreModule.forRoot(),
        EffectsModule.forRoot([]),
        EntityDataModule.forRoot(
          entityMetadata
        )
      ],
      providers: [
        MyService,
         provide: EntityCacheEffects, useValue:  ,
         provide: EntityDataService, useValue: null 
      ]
    );

    await TestBed.compileComponents();
  );

【讨论】:

以上是关于单元测试茉莉花@NGRX/DATA的主要内容,如果未能解决你的问题,请参考以下文章

reactjs中组件的单元测试功能使用业力和茉莉花

将角种子茉莉花单元测试转换为咖啡脚本

茉莉花匹配器功能未在 angularjs/karma 单元测试中加载

如何用茉莉花角度编写单元测试以实现滚动功能

带有茉莉花的AngularJS 2单元测试组件面临错误,无法读取null的属性'firstChild'

如何在茉莉花中为可观察的 finally 块编写单元测试 - Angular 2