【问题标题】:Angular 2 Testing Error Cannot read property 'forEach' of undefinedAngular 2 测试错误无法读取未定义的属性“forEach”
【发布时间】:2016-12-07 20:00:10
【问题描述】:

我正在尝试测试一个 component.ts:

import { ActivatedRoute, Params } from '@angular/router';
import { Location } from '@angular/common';
...
ngOnInit(): void {
    this.route.params.forEach((params: Params) => {
        let id = +params['id'];
...
}

spec.ts 代码如下:

describe('MyDetailComponent', () => {
    beforeEach( async(() => {
    addMatchers();
    TestBed.configureTestingModule({
            imports: [ MaterialModule, FormsModule ],
            declarations: [ MyDetailComponent ],
            providers: [
                ...
                { provide: RequestOptions, useClass: RequestOptionsStub },
                { provide: ActivatedRoute,      useClass: RouterStub },
                { provide: Location }, 
                { provide: XHRBackend, useClass: MockBackend },
                AppSettings,
                Http,
                ConnectionBackend,
                Jsonp
            ]
        })
    .compileComponents()
    .then(createComponent);
}));

我得到了错误: 失败:未捕获(在承诺中):错误:错误:0:0 导致:无法读取未定义的属性“forEach” TypeError:无法读取未定义的属性“forEach”

如何解决这个问题?

【问题讨论】:

  • 还有一个很好的建议是添加 RouterTestingModule 这也有助于解决问题:TestBed.configureTestingModule({ imports: [ ... RouterTestingModule.withRoutes([ { path: '...',组件:MyDetailComponent } ]) ],

标签: javascript angular testing utilities


【解决方案1】:

Angular2 RC5 Mock Activated Route Params 找到答案:

import { Observable } from 'rxjs/Rx';

...

{ provide: ActivatedRoute, useValue: { 'params': Observable.from([{ 'id': 1 }]) } }

【讨论】:

    猜你喜欢
    • 2019-01-08
    • 1970-01-01
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多