微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

注入服务的 TranslocoLocale 管道导致单元测试错误

如何解决注入服务的 TranslocoLocale 管道导致单元测试错误

如何测试使用 TranslocoLocale 管道(TranslocoDecimalPipe、TranslocoDatePipe 等)的服务?我显然可以自己模拟管道,但我不应该这样做。

我的组件模板中的 TranslocoLocale 管道在单元测试中正常工作。 在服务中使用管道,通过将它们注入构造函数,会导致单元测试中断。 它要么抱怨管道没有提供者,要么抱怨 ChangeDetectorRef 没有提供者。

在下面的示例中,我的服务使用 TranslocoDecimalPipe。在我的测试中,我收到错误

NullInjectorError: StaticInjectorError(DynamicTestModule)[L10nTestService -> TranslocoDecimalPipe]: 
  StaticInjectorError(Platform: core)[L10nTestService -> TranslocoDecimalPipe]: 
    NullInjectorError: No provider for TranslocoDecimalPipe!
import { Injectable } from '@angular/core';
import { createServiceFactory,spectatorService } from '@ngneat/spectator/jest';
import { TranslocoModule } from '@ngneat/transloco';
import { TranslocoDecimalPipe,TranslocoLocaleModule } from '@ngneat/transloco-locale';

@Injectable({ providedIn: 'root' })
class L10nTestService {
  decimalValue: string;

  constructor(private translocoDecimalPipe: TranslocoDecimalPipe) {
    this.decimalValue = translocoDecimalPipe.transform(1234567890.123456);
  }
}

describe('L10ntestService',() => {
  let spectator: spectatorService<L10nTestService>;
  const createService = createServiceFactory<L10nTestService>({
    service: L10nTestService,imports: [
      TranslocoModule,TranslocoLocaleModule.init()
    ],providers: [TranslocoDecimalPipe]
  });

  beforeEach(() => spectator = createService());

  it('decimal value should be transformed',() => {
    expect(spectator.service.decimalValue).toBe('1,234,567,890.123');
  });
});

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。