Angular 7测试:“无法绑定到formGroup,因为它不是form的已知属性”

rsb*_*097 6 unit-testing karma-jasmine angular

控制台记录错误:

15 02 2019 14:50:24.868:INFO [Chrome 72.0.3626(Windows 10.0.0)]:已连接到套接字BiEioS9fHwq-QLg3AAAA,ID为27946068 Chrome 72.0.3626(Windows 10.0.0)LoginComponent应该创建FAILED无法绑定到“ formGroup”,因为它不是“ form”的已知属性。(“

        <div class="row">
Run Code Online (Sandbox Code Playgroud)

(等等)

我正在使用command运行它ng test。我的规格文件:

describe('LoginComponent', () => {

    let component: LoginComponent;
    let fixture: ComponentFixture<LoginComponent>;

    const fakeActivatedRoute = {
        snapshot: { data: {} }
    } as ActivatedRoute;

    beforeEach(async(() => {
        TestBed.configureTestingModule({
            declarations: [
                LoginComponent
            ],
            imports: [
                RouterTestingModule,
                HttpClientModule,
                CommonModule,
                BrowserModule,
                BrowserAnimationsModule,
                ReactiveFormsModule,
                MessageModule,
                MatFormFieldModule,
                MatInputModule,
                MatButtonModule,
                MatCheckboxModule,
                MatProgressSpinnerModule,
                MatRadioModule,
                MatSliderModule,
                NgbModule
            ],
            providers: [
                {
                    provide: ActivatedRoute,
                    useValue: fakeActivatedRoute
                }
            ]
        })
            .compileComponents();
    }));

    beforeEach(() => {
        fixture = TestBed.createComponent(LoginComponent);
        component = fixture.debugElement.componentInstance;
        fixture.detectChanges();
    });

    it('should create', () => {
        expect(component).toBeTruthy();
    });

});
Run Code Online (Sandbox Code Playgroud)

LoginModule文件:

@NgModule({
  declarations: [LoginComponent],
  imports: [
    CommonModule,
    BrowserModule,
    BrowserAnimationsModule,
    FormsModule,
    ReactiveFormsModule,
    MatFormFieldModule,
    MatInputModule,
    MatButtonModule,
    MatCheckboxModule,
    MatProgressSpinnerModule,
    MatRadioModule,
    MatSliderModule,
    MessageModule,
    NgbModule.forRoot()
  ],
  providers: [],
  bootstrap: [
    LoginComponent,
    MessageComponent
  ]
})
export class LoginModule {}
Run Code Online (Sandbox Code Playgroud)

少了什么东西?

sum*_*ape 15

这取决于您在项目中使用的表单类型。Angular 提供了模板驱动的表单和响应式表单。如果您使用的是反应式表单,则需要在您的 componentName.spec.ts 文件中导入 ReactiveFormsModule 作为

import { ReactiveFormsModule } from '@angular/forms';
beforeEach(async(() => {
TestBed.configureTestingModule({
  declarations: [ ContactUsFormComponent ],
  imports: [ReactiveFormsModule]
})
.compileComponents();}));
Run Code Online (Sandbox Code Playgroud)

否则,如果您使用模板驱动的表单,则需要导入 FormsModule。