【发布时间】:2021-10-19 16:19:27
【问题描述】:
我在测试这段代码时遇到了一个问题:
constructor(
private valuePairService: ValuePairService,
private sanitizer: DomSanitizer,
private service: Service,
private router: Router,
private route: ActivatedRoute
) {}
ngOnInit(): void {
this.route.data.subscribe(({ result }) => {
this.video =
result.value === undefined
? '//player.vimeo.com/video/65498532'
: result.value;
});
}
在我的测试中,我添加了这个提供程序:
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [RouterTestingModule, HttpClientTestingModule],
providers: [
{
provide: ActivatedRoute,
useValue: { data: of({ value: 'test'}) }
},
],
}).compileComponents();
router = TestBed.inject(Router);
});
关于如何测试它的任何想法?执行测试时出现此错误:
error properties: Object({ longStack: 'TypeError: Cannot read property 'value' of undefined
更新:
问题是我以错误的方式测试了 observable。我使用的是“价值”而不是“结果”。单元测试中的解决方案如下:
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [RouterTestingModule, HttpClientTestingModule],
providers: [
{
provide: ActivatedRoute,
useValue: { data: of({ result: 'test'}) }
},
],
}).compileComponents();
router = TestBed.inject(Router);
});
【问题讨论】:
-
您的已激活路由的测试替身与它正在替换的东西的结构不同,这使得它没有用处。
-
想想你正在测试的代码实际上期望在订阅中收到什么。 result 是从哪里来的,为什么应该是具有 value 属性的对象时却未定义?
-
请注意,这不是帮助台,如果您有截止日期,您需要自己管理:meta.stackoverflow.com/questions/326569/…。
-
是错字吗?
this.route.data.subscribe(({ result })应该是this.route.data.subscribe(result=>...) -
黑魔法对我来说;) ty。不过,为什么不
result?
标签: angular unit-testing angular-unit-test