1

我有一个angular 6应用程序ngx-translate/core@10.0.2。尝试使用CustomLoader带有硬编码值的 a。但有些事情不太对劲。

测试

class CustomLoader implements TranslateLoader {
  getTranslation(lang: string): Observable<any> {
   return of({
      'DETAILS': {
        'PIN_ENTRY': {              
          'INPUT': {
            'ERRORS': {
              'INVALID': 'Blah',
              'INELIGIBLE': 'Blah Blah'
            }
          }
        }
      }
  });
 }
}

beforeEach(async(() => {
 TestBed.configureTestingModule({
  declarations: [ MyComponent ],
  imports: [
    ... // Elided for brevity
    TranslateModule.forRoot({
      loader: { provide: TranslateLoader, useClass: CustomLoader}
    })
  ],      
})
.compileComponents();
}));

零件

ngOnInit() {
  this.translateService.getTranslation('DETAILS.PIN_ENTRY.INPUT').pipe(first()).subscribe(translations => {      
    this.errorTranslations = translations['ERRORS'];
  });
}

问题是,translate里面subscribe总是'DETAILS.PIN_ENTRY.INPUT'。我还在 中添加了一个日志语句CustomLoader#getTranslation,以查看它是否已加载,但看不到输出。

我的设置有什么问题?

4

1 回答 1

1

当测试一个在 observable 中有值的组件时,你应该使用其中一个async或者fakeAsync在你的测试中。

我认为这fakeAsync可能是您最好的选择:

describe('...', () => {
  it('...', () => {
    // create your component

    // move forward in time
    tick();

    expect(component.errorTranslations).toEqual(yourError);
  })
})
于 2018-06-27T19:40:56.063 回答