Angular 测试无法读取 null 的属性“ngModule”

Tch*_*iko 3 testng angular

我正在尝试在 Angular 上使用一个简单的测试,这是测试的内容:

import { ComponentFixture } from '@angular/core/testing';
import { TestBed } from '@angular/core/testing';
import { By } from "@angular/platform-browser"
import { TestComponentComponent } from './test-component.component';

fdescribe('TestComponentComponent', () => {
  let component: TestComponentComponent;
  let fixture: ComponentFixture<TestComponentComponent>;

  beforeEach(async () => {
    await TestBed.configureTestingModule({
      declarations: [ TestComponentComponent ]
    })
    .compileComponents();
  });

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

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

  it('should show no data', () => {
    fixture.detectChanges();
    const noDataDiv = fixture.debugElement.query(By.css('#noData'));
    expect(noDataDiv.nativeElement.textContent).toEqual('No Data');
  });
});
Run Code Online (Sandbox Code Playgroud)

我通过这个命令运行测试:

ng test --main .\src\app\test-component\test-component.component.spec.ts

我收到了这个错误:

类型错误:无法读取 null 的属性“ngModule”

版本之间有什么变化吗?

我正在使用最新版本的 angular 并且测试文件已使用命令 ng generate component 生成

我刚刚在描述后面添加了“f”和最新的“it”

cod*_*lla 7

您不需要--main参数,您可以使用 include 运行该文件:

ng test --include src/app/test-component/test-component.component.spec.ts
Run Code Online (Sandbox Code Playgroud)

Include 还具有glob支持,您可以使用它在文件夹中运行测试:

ng test --include src/**/*.spec.ts
Run Code Online (Sandbox Code Playgroud)

什么是--main对的参数?

它用于定义 Karma 的 Angular 应用程序的入口点。这很重要,因为 Angular 需要在测试模式下启动,以便可以创建例如模块和组件。

如果您查看angular.json项目中的 ,您将看到如下内容:

        "test": {
          "builder": "@angular-devkit/build-angular:karma",
          "options": {
            "main": "src/test.ts"
            ...
          }
        }
Run Code Online (Sandbox Code Playgroud)

所述main标识符链接到文件src/test.ts,初始化测试环境:

// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(
  BrowserDynamicTestingModule,
  platformBrowserDynamicTesting()
);
Run Code Online (Sandbox Code Playgroud)

因此,一种用例--main是为需要对测试环境进行特殊配置的不同类型的测试使用不同的入口点文件。