Error: Can't resolve all parameters for ActivatedRoute: (?, ?, ?, ?, ?, ?, ?, ?)
Error: Can't resolve all parameters for ActivatedRoute: (?, ?, ?, ?, ?, ?, ?, ?)
我正在尝试使用 Karma/Jasmine 中的 ActivatedRoute Class 测试一个 Angular 组件,但我遇到了一个非常烦人的错误,我无法修复。 Error: Can't resolve all parameters for ActivatedRoute: (?, ?, ?, ?, ?, ?, ?, ?)
我已经尝试了我在网上找到的所有解决方案,以各种方式模拟 Activated Route。但我就是无法让它工作。
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { ActivatedRoute, convertToParamMap } from '@angular/router';
import { RouterTestingModule } from '@angular/router/testing';
import { of } from 'rxjs';
import { SearchbarComponent } from './searchbar.component';
describe('SearchbarComponent', () => {
let component: SearchbarComponent;
let fixture: ComponentFixture<SearchbarComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [ RouterTestingModule ],
declarations: [ SearchbarComponent ],
providers: [
{
provide: ActivatedRoute,
useValue: {
queryParams: of(convertToParamMap({
search: ""
}))
}
}
]
})
.compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(SearchbarComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Input, Component, HostListener, OnInit } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
...
@Component({
selector: 'searchbar',
templateUrl: './searchbar.component.html',
styleUrls: ['./searchbar.component.scss'],
providers: [ ActivatedRoute ]
})
export class SearchbarComponent implements OnInit {
constructor(private route: ActivatedRoute) {
this.route.queryParams
.subscribe(params => {
this.currentSearch = params.search;
});
}
...
}
RouterTestingModule
处理所有与路由相关的东西的模拟,包括 ActivatedRoute。您可以删除 providers
部分,我希望它能正常工作
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { ActivatedRoute, convertToParamMap } from '@angular/router';
import { RouterTestingModule } from '@angular/router/testing';
import { of } from 'rxjs';
import { SearchbarComponent } from './searchbar.component';
describe('SearchbarComponent', () => {
let component: SearchbarComponent;
let fixture: ComponentFixture<SearchbarComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [ RouterTestingModule ],
declarations: [ SearchbarComponent ],
})
.compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(SearchbarComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
我正在尝试使用 Karma/Jasmine 中的 ActivatedRoute Class 测试一个 Angular 组件,但我遇到了一个非常烦人的错误,我无法修复。 Error: Can't resolve all parameters for ActivatedRoute: (?, ?, ?, ?, ?, ?, ?, ?)
我已经尝试了我在网上找到的所有解决方案,以各种方式模拟 Activated Route。但我就是无法让它工作。
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { ActivatedRoute, convertToParamMap } from '@angular/router';
import { RouterTestingModule } from '@angular/router/testing';
import { of } from 'rxjs';
import { SearchbarComponent } from './searchbar.component';
describe('SearchbarComponent', () => {
let component: SearchbarComponent;
let fixture: ComponentFixture<SearchbarComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [ RouterTestingModule ],
declarations: [ SearchbarComponent ],
providers: [
{
provide: ActivatedRoute,
useValue: {
queryParams: of(convertToParamMap({
search: ""
}))
}
}
]
})
.compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(SearchbarComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Input, Component, HostListener, OnInit } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
...
@Component({
selector: 'searchbar',
templateUrl: './searchbar.component.html',
styleUrls: ['./searchbar.component.scss'],
providers: [ ActivatedRoute ]
})
export class SearchbarComponent implements OnInit {
constructor(private route: ActivatedRoute) {
this.route.queryParams
.subscribe(params => {
this.currentSearch = params.search;
});
}
...
}
RouterTestingModule
处理所有与路由相关的东西的模拟,包括 ActivatedRoute。您可以删除 providers
部分,我希望它能正常工作
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { ActivatedRoute, convertToParamMap } from '@angular/router';
import { RouterTestingModule } from '@angular/router/testing';
import { of } from 'rxjs';
import { SearchbarComponent } from './searchbar.component';
describe('SearchbarComponent', () => {
let component: SearchbarComponent;
let fixture: ComponentFixture<SearchbarComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [ RouterTestingModule ],
declarations: [ SearchbarComponent ],
})
.compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(SearchbarComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});