javascript - 使用 Karma / Jasmine for Router 的 Angular 单元测试错误
问题描述
对我的 Angular 应用程序进行单元测试时出现以下错误,即:错误:模块“DynamicTestModule”导入的意外值“路由器”。请添加@NgModule 注释。” 有什么想法吗?到目前为止的代码是:
header.component.spec.ts
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
import { HeaderComponent } from './header.component';
import { RouterModule, Router } from '@angular/router';
import { AppRoutingModule } from 'src/app/app-routing.module';
describe('HeaderComponent', () => {
let component: HeaderComponent;
let fixture: ComponentFixture<HeaderComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ HeaderComponent],
imports: [
FontAwesomeModule,
RouterModule,
Router
],
providers: [ AppRoutingModule],
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(HeaderComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
header.component.ts
import { Component, OnInit, Input } from '@angular/core';
import { faHeadphones} from '@fortawesome/free-solid-svg-icons';
import { PlaylistService } from '../../../services/playlist.service';
import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
@Component({
selector: 'app-header',
templateUrl: './header.component.html',
styleUrls: ['./header.component.scss']
})
export class HeaderComponent implements OnInit {
faHeadphones = faHeadphones;
constructor(private list: PlaylistService) { }
ngOnInit() {
}
}
app.module.ts
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';
import { HeaderComponent } from './components/header/header/header.component';
import { FooterComponent } from './components/footer/footer/footer.component';
import { ContentComponent } from './components/content-area/content/content.component';
import { HomeViewComponent } from './views/home-view/home-view.component';
import { AppRoutingModule } from './app-routing.module';
import { HttpClientModule, HttpClientXsrfModule } from '@angular/common/http';
import { FormsModule } from '@angular/forms';
import { NgxPaginationModule } from 'ngx-pagination';
import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
import { Ng2SearchPipeModule } from 'ng2-search-filter';
import { PlaylistViewComponent } from './views/playlist-view/playlist-view/playlist-view.component';
import { NewsComponent } from './components/news/news/news.component';
import { CarouselModule } from 'ngx-owl-carousel-o';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { RouterModule } from '@angular/router';
@NgModule({
declarations: [
AppComponent,
HeaderComponent,
FooterComponent,
ContentComponent,
HomeViewComponent,
PlaylistViewComponent,
NewsComponent,
],
imports: [
BrowserModule,
AppRoutingModule,
HttpClientModule,
HttpClientXsrfModule,
FormsModule,
NgxPaginationModule,
FontAwesomeModule,
Ng2SearchPipeModule,
CarouselModule,
BrowserAnimationsModule,
RouterModule,
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
有任何想法吗?
解决方案
您应该在单元测试规范中使用RouterTestingModule。
您可以像这样导入:
import { RouterTestingModule } from '@angular/router/testing';
使用它,您无需在规范中包含 RouterModule 和 Router。下面的示例规范。
import { RouterTestingModule } from '@angular/router/testing';
describe('AppComponent', () => {
let component: AppComponent;
let fixture: ComponentFixture<AppComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ AppComponent ],
imports: [ReactiveFormsModule ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(AppComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
推荐阅读
- javascript - 如何在javascript中使用for循环显示来自两个对象的数据
- xamarin.ios - 到了
<0xffffffff> 堆栈跟踪错误(参见下面的代码) - javascript - 隐藏/滑动侧导航栏
- nlp - RegexpTokenizer 和 spacy 分词器有什么区别?
- verilog - 如何在 Verilog 的模块中传递特定的数组索引作为输入?
- reactjs - 如何将导航道具传递给子组件?
- twitter-bootstrap - Bootstrap selectpicker 实时搜索:在 keyup 调用 ajax 以填充选项
- python - 为什么 Python 使用 py 在 Windows 上运行程序
- oracle12c - 在 expdp 中分离日志路径和转储路径
- javascript - 保护使用 SAP Cloud SDK 构建的 JS 应用程序