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();
});
});
我在我的 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();
});
});