unit-testing - 如何对依赖于 ActivatedRoute 参数的组件进行单元测试?

标签 unit-testing angular angular2-routing angular2-testing

我正在对用于编辑对象的组件进行单元测试。该对象具有唯一的 id,用于从服务中托管的对象数组中获取特定对象。具体的id是通过路由传递的参数获取的,具体是通过ActivatedRoute类。

构造函数如下:

constructor(private _router:Router, private _curRoute:ActivatedRoute, private _session:Session) {}
    
ngOnInit() {
  this._curRoute.params.subscribe(params => {
    this.userId = params['id'];
    this.userObj = this._session.allUsers.filter(user => user.id.toString() === this.userId.toString())[0];

我想在此组件上运行基本的单元测试。但是,我不确定如何注入(inject) id 参数,并且组件需要这个参数。

顺便说一句:我已经为 Session 服务创建了一个 mock,所以不用担心。

最佳答案

执行此操作的最简单方法是仅使用 useValue 属性并提供一个包含您要模拟的值的 Observable。

RxJS < 6

import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/of';
...
{
  provide: ActivatedRoute,
  useValue: {
    params: Observable.of({id: 123})
  }
}

RxJS >= 6

import { of } from 'rxjs';
...
{
  provide: ActivatedRoute,
  useValue: {
    params: of({id: 123})
  }
}

关于unit-testing - 如何对依赖于 ActivatedRoute 参数的组件进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38356084/

相关文章:

unit-testing - 使用 Link 测试 React Router

angular - 如何访问服务中 angular 2/4 中为特定路线添加的静态数据?

angular - Angular 应用程序中的 ngrx 导入

java - 断言该值在java和testng或junit中的map中设置

java - 如何模拟/ stub jOOQ UpdatableRecordImpl store() 方法?

c# Rhino 模拟 - 这是对模拟的适当使用吗?

Angular :host <selector> is not working

javascript - Angular2 刷新路由器导出

typescript - 将静态文件重定向到根目录、html5 路由、Angular2

angular - 如何将孙 View 渲染到与第一个 child 相同的路由器导出中?