你怎么嘲笑ActivatedRoute

问题描述 投票:9回答:5

我正在学习角,我想要做的测试,但我坚持。我有一个函数:

ngOnInit(): void {
    this.route.paramMap
    .switchMap((params: ParamMap) => 
        this.SomethingService.getSomething(params.get('id')))
        .subscribe(something => {
            this.something = something;
            this.doSomethingElse();
    });
}

哪里

route: ActivatedRoute

我要测试,但我不知道如何嘲笑ActivatedRoute

angular unit-testing angular-router
5个回答
15
投票

一个简单的方法来模拟ActivatedRoute是这个:

    TestBed.configureTestingModule({
      declarations: [YourComponenToTest],
      providers: [
        {
          provide: ActivatedRoute,
          useValue: {
            params: Observable.from([{id: 1}]),
          },
        },
      ]
    });

然后在您的测试将可以和你的功能应该有这方面的工作(至少是部分ActivatedRoute)

如果你想它的股票在一个变量,你可以在你的qazxsw POI功能qazxsw POI得到它。

不要忘了从TestBed.get(ActivatedRoute)导入观察到的,不是从it


11
投票

任何有兴趣如何正确地拥有多个物业这样做,这是你定义你的模拟类方式:

rxjs/Rx

这样,您就可以订阅您rxjs/Observable和检索多个值 - 在这种情况下import { convertToParamMap } from '@angular/router'; import { Observable } from 'rxjs/Observable'; export class ActivatedRouteMock { public paramMap = Observable.of(convertToParamMap({ testId: 'abc123', anotherId: 'd31e8b48-7309-4c83-9884-4142efdf7271', })); } paramMap


8
投票

我正面临着使用,而不是PARAMS paramMap同样的问题。这引起了它的工作对我来说,至少在最简单的情况:

testId

5
投票

修改上述安德鲁斯的回答。 。 。

对于RxJS 6+:

anotherId

import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { Observable } from 'rxjs/Observable'; import 'rxjs/add/observable/of'; import { ComponentToTest } from './component-to-test.component'; import { ActivatedRoute } from '@angular/router'; TestBed.configureTestingModule({ declarations: [ComponentToTest], providers: [ { provide: ActivatedRoute, useValue: { paramMap: Observable.of({ get: (key) => 'value' }) } } ] });


0
投票

就我而言,我不得不创建一个新的类来处理这种类型的测试,这个类可以让你处理快照,queryParams,而params。

import { convertToParamMap } from '@angular/router';
import { of } from 'rxjs';


export class ActivatedRouteMock {
    public paramMap = of(convertToParamMap({ 
        testId: 'abc123',
        anotherId: 'd31e8b48-7309-4c83-9884-4142efdf7271',          
    }));
}

这是测试应该如何看

https://www.learnrxjs.io/operators/creation/of.html

import { Params } from '@angular/router'; import { BehaviorSubject } from 'rxjs'; export class MockActivatedRoute { private innerTestParams?: any; private subject?: BehaviorSubject<any> = new BehaviorSubject(this.testParams); params = this.subject.asObservable(); queryParams = this.subject.asObservable(); constructor(params?: Params) { if (params) { this.testParams = params; } else { this.testParams = {}; } } get testParams() { return this.innerTestParams; } set testParams(params: {}) { this.innerTestParams = params; this.subject.next(params); } get snapshot() { return { params: this.testParams, queryParams: this.testParams }; } }

© www.soinside.com 2019 - 2024. All rights reserved.