ng2-translate:无法读取 TranslatePipe.transform 处未定义的 属性 'subscribe'

ng2-translate: Cannot read property 'subscribe' of undefined at TranslatePipe.transform

我在我的 Angular 5 项目中使用 ng2-translate,我正在尝试为一个组件创建单元测试。 我总是在我的测试中导入 TranslateModule.forRoot( *...* ),测试将在我的视图中使用翻译管道工作。

但在两种情况下,在单元测试期间会抛出上述错误: 我看不出与其他工作测试有任何区别。

× should create (44ms) TypeError: Cannot read property 'subscribe' of undefined at TranslatePipe.transform (webpack:///./node_modules/ng2-translate/src/translate.pipe.js?:74:75) at Object.eval [as updateRenderer] (ng:///DynamicTestModule/MyComponent.ngfactory.js:127:70) at Object.debugUpdateRenderer [as updateRenderer] (webpack:///./node_modules/@angular/core/esm5/core.js?:14951:21) at checkAndUpdateView (webpack:///./node_modules/@angular/core/esm5/core.js?:14065:14)

为什么会发生这种情况? 我不使用 TranslateService,但我使用模板中的管道。 有人遇到同样的问题吗?

我有同样的问题,我添加到 TranslateService mock class:

public onLangChange: EventEmitter<any> = new EventEmitter(); public onTranslationChange: EventEmitter<any> = new EventEmitter(); public onDefaultLangChange: EventEmitter<any> = new EventEmitter();

让我扩展@Agata 对 jasmine 用户的回答:

describe('MyTestComponent', () => {
  // ...
  
  const translateService = jasmine.createSpyObj<TranslateService>('translateService', ['instant', 'get']);
  const translateServiceMock = {
    currentLang: 'de',
    onLangChange: new EventEmitter<LangChangeEvent>(),
    use: translateService.get,
    get: translateService.get.and.returnValue(of('')),
    onTranslationChange: new EventEmitter(),
    onDefaultLangChange: new EventEmitter()
  };

  beforeEach(async () => {
    await TestBed.configureTestingModule({
      declarations: [
        // ...
      ],
      imports: [
        // ...
        TranslateModule.forRoot(),
      ],
      providers: [
        // ...
        {provide: TranslateService, useValue: translateServiceMock}
      ]
      }).compileComponents();
  });
});