gpt4 book ai didi

angular - 如何在对解析器进行单元测试时模拟 ActivatedRouteSnapshot

转载 作者:太空狗 更新时间:2023-10-29 17:03:29 24 4
gpt4 key购买 nike

我想为我的解析器编写一个单元测试,它需要在其构造函数中采用 ActivatedRouteSnapshot,如下所示:

export class MyResolver {
constructor () {
// ...
}

resolve (private route: ActivatedRouteSnapshot) {
callFoo(route.params.val);
}
};

但在我的单元测试中,使用模拟数据提供激活路线快照的最佳方式是什么?当我尝试创建一个只包含我需要的属性的对象时,我收到一个错误,指出它无法转换为 ActivatedRouteSnapshot:

it('should call foo', inject([MyResolver], async (myResolver: MyResolver) => {
const mockRoute = {
params: {
val: '1234'
};
};

sinon.spy(callFoo);
myResolver.resolve(mockRoute); // This is the line that errors
expect(callFoo.calledWith('1234')).to.be.true;
}));

错误:

Type '{ params: { val: string; }; }' cannot be converted to type 'ActivatedRouteSnapshot'.

我如何提供模拟 ActivatedRouteSnapshot 以传递给我的解析器?

最佳答案

您必须像这样提供事件路线:

import {TestBed} from '@angular/core/testing';
import {SomeResolver} from './some.resolver';
import {ActivatedRoute, convertToParamMap} from '@angular/router';
import {of} from 'rxjs';

describe('SomeResolver', () => {
let someResolver: SomeResolver;
let route: ActivatedRoute;

TestBed.configureTestingModule({
providers: [
{
provide: ActivatedRoute,
useValue: {snapshot: {paramMap: convertToParamMap({id: 'one-id'})}}
},
SomeResolver
]
});

beforeEach(() => {
heroResolver = TestBed.get(HeroResolver);
route = TestBed.get(ActivatedRoute);
});

it('should resolve', (() => {
someResolver.resolve(route.snapshot);
}));
});

检查一个更复杂的例子 here .

关于angular - 如何在对解析器进行单元测试时模拟 ActivatedRouteSnapshot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48389002/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com