angular - TypeError:无法读取未定义的属性“订阅”(角度单元测试)
问题描述
我有一个简单的测试,其结构如下:
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { BreadcrumbsComponent } from './breadcrumbs.component';
import { RouterTestingModule } from '@angular/router/testing';
import { TranslateLoader, TranslateModule, TranslateService } from '@ngx-translate/core';
import { HttpClient } from '@angular/common/http';
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { BreadcrumbsService } from './breadcrumbs.service';
import { multiTranslateHttpLoaderFactory } from 'app/app.component';
fdescribe('BreadcrumbsComponent', () => {
let component: BreadcrumbsComponent;
let translateService: TranslateService;
let fixture: ComponentFixture<BreadcrumbsComponent>;
let translateServiceStub: Partial<TranslateService>;
let translateServiceStub: Partial<TranslateService>;
translateServiceStub = {
getBrowserLang: () => {
return 'de';
},
onLangChange: new EventEmitter(),
};
breadcrumbsServiceStub = {
onUpdateRequest: new Subject(),
updateBreadcrumbs: () => {
}
};
beforeEach((() => {
TestBed.configureTestingModule({
declarations: [BreadcrumbsComponent],
imports: [
RouterTestingModule,
HttpClientTestingModule,
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useFactory: multiTranslateHttpLoaderFactory,
deps: [HttpClient]
}
}),
],
providers: [
{provide: TranslateService, useValue: translateServiceStub},
{provide: BreadcrumbsService, useValue: breadcrumbsServiceStub},
]
});
}));
beforeEach(() => {
fixture = TestBed.createComponent(BreadcrumbsComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
目前这个错误被抛出,我无法处理:
TypeError:无法读取未定义的属性“订阅”
这是我的课程,ngOnInit 方法中的一行导致此错误:
export class BreadcrumbsComponent implements OnInit {
breadcrumbs: Breadcrumb[] = [];
constructor(private router: Router,
private activeRoute: ActivatedRoute,
private translate: TranslateService,
private breadcrumbsService: BreadcrumbsService) {
}
ngOnInit() {
this.translate.onLangChange.subscribe(() => this.identifyRoute());
}
...
我在这里做错了什么?或者。有没有办法绕过错误或模拟这条线以便测试通过?我真的不知道如何在我的测试中模拟这条线。
解决方案
你能试一下吗:
import { of } from 'rxjs';
translateServiceStub = {
getBrowserLang: () => {
return 'de';
},
onLangChange: of({
// whatever object is expected
}),
};
推荐阅读
- spotfire - 如何使用 IronPython 将使用 Spotfire Consumer 修改的分析保存回库?
- java - 如何在拦截器中获取控制器类名以进行日志记录
- access-token - Azure API 管理 - 如何刷新访问令牌后端 API?
- php - 无法从 XAMPP PHP 运行 Python 脚本
- perl - Perl - 需要明确的包名
- performance - 在 Torch 中计算频域卷积的更快替代方案
- python-3.x - 计算一个组合在日志中使用的次数
- python - 如何在 Django Rest Framework ViewSet 中使用 Last-Modified 标头?
- python - 如何从 AWS Lambda 提供 GIF、JPEG 和 PNG
- python-3.x - 告诉我如何通过 QUERY 从树莓派访问 OracleDB