【问题标题】:Jest + kendo-angular-grid => Class constructor EventEmitter_ cannot be invoked without 'new'Jest + kendo-angular-grid => 类构造函数 EventEmitter_ 不能在没有 \'new\' 的情况下被调用
【发布时间】:2022-08-09 23:58:53
【问题描述】:

运行 Jest 测试文件时出现错误:

TypeError: Class constructor EventEmitter_ cannot be invoked without \'new\'

  at new ZoneAwareEventEmitter (node_modules/@progress/kendo-angular-grid/dist/npm/common/event-emitter.js:16:28)
  at new GridComponent (node_modules/@progress/kendo-angular-grid/dist/npm/grid.component.js:328:1)

我尝试了目标(es5、es6、es2019 ...)和模块(commonJs、es6、es2015、es2020 ....)的所有可能性

\"编译器选项\": { \"outDir\": \"./out-tsc/spec\", \"目标\": \"es2019\", \"模块\": \"es2020\", \"moduleResolution\": \"节点\", },

包.json

{
  \"name\": \"jest-angular\",
  \"version\": \"0.0.0\",
  \"scripts\": {
    \"ng\": \"ng\",
    \"start\": \"ng serve\",
    \"build\": \"ng build\",
    \"watch\": \"ng build --watch --configuration development\",
    \"test\": \"jest\",
    \"test-esm\": \"node --experimental-vm-modules --no-warnings node_modules/jest/bin/jest.js -c=jest-esm.config.mjs --no-cache\",
    \"test:w\": \"jest --watchAll\",
    \"cover\": \"jest --coverage\"
  },
  \"private\": true,
  \"dependencies\": {
    \"core-js\": \"^3.21.1\",
    \"@angular/animations\": \"^13.3.0\",
    \"@angular/cdk\": \"^13.3.0\",
    \"@angular/common\": \"^13.3.0\",
    \"@angular/compiler\": \"^13.3.0\",
    \"@angular/core\": \"^13.3.0\",
    \"@angular/forms\": \"^13.3.0\",
    \"@angular/localize\": \"^13.3.0\",
    \"@angular/platform-browser\": \"^13.3.0\",
    \"@angular/platform-browser-dynamic\": \"^13.3.0\",
    \"@angular/router\": \"^13.3.0\",
    \"web-animations-js\": \"2.3.2\",
    \"@progress/kendo-angular-l10n\": \"3.0.4\",
    \"@progress/kendo-licensing\": \"1.2.2\",
    \"@progress/kendo-angular-popup\": \"4.0.5\",
    \"@progress/kendo-angular-buttons\": \"7.0.4\",
    \"@progress/kendo-angular-intl\": \"3.1.3\",
    \"@progress/kendo-drawing\": \"1.16.3\",
    \"@progress/kendo-angular-dateinputs\": \"6.0.3\",
    \"@progress/kendo-angular-inputs\": \"8.0.8\",
    \"@progress/kendo-angular-dropdowns\": \"6.0.2\",
    \"@progress/kendo-angular-treeview\": \"6.0.2\",
    \"@progress/kendo-angular-label\": \"3.1.3\",
    \"@progress/kendo-data-query\": \"1.5.6\",
    \"@progress/kendo-angular-pdf-export\": \"3.0.4\",
    \"@progress/kendo-angular-excel-export\": \"4.0.4\",
    \"@progress/kendo-angular-grid\": \"6.1.1\",
    \"rxjs\": \"~7.5.5\",
    \"tslib\": \"^2.3.1\",
    \"zone.js\": \"~0.11.5\"
  },
  \"devDependencies\": {
    \"@angular-devkit/build-angular\": \"^13.3.0\",
    \"@angular/cli\": \"^13.3.0\",
    \"@angular/compiler-cli\": \"^13.3.0\",
    \"@types/jest\": \"^27.0.3\",
    \"@types/node\": \"^12.11.1\",
    \"jest\": \"^27.5.1\",
    \"jest-preset-angular\": \"^11.1.1\",
    \"typescript\": \"~4.5.2\"
  }
}

jest.config.js

module.exports = {
  verbose: true,
  testPathIgnorePatterns: [
    \"<rootDir>/node_modules/\",
  ],
  preset: \"jest-preset-angular\",
  setupFilesAfterEnv: [\"<rootDir>/setup-jest.ts\"],
};

设置-jest.ts

import \'@angular/localize/init\';
import \'jest-preset-angular/setup-jest\';

app.component.html

<kendo-grid></kendo-grid>

app.component.spec.ts

import { ComponentFixture, TestBed } from \'@angular/core/testing\';
import { AppComponent } from \'./app.component\';
import { AppModule } from \'./app.module\';

let fixture: ComponentFixture<AppComponent>;
let app: AppComponent;

beforeEach(() => {
  TestBed.configureTestingModule({
    imports: [AppModule],
    providers: [],
    declarations: [AppComponent],
  }).compileComponents();
 
  fixture = TestBed.createComponent(AppComponent);
  app = fixture.componentInstance;
});

describe(\'class AppComponent{}\', () => {

  it(\'Should create the app\', () => {
    expect(app).toBeTruthy();
  });
});
  • 请提供足够的代码,以便其他人可以更好地理解或重现该问题。
  • Telerik 知道所描述的问题,因为 Jest 预设在没有 Ivy 包的情况下无法与 Angular v13 一起使用。团队目前正在切换到预计于 2022 年 5 月 R2 发布的 Ivy 库格式。进展可以在 GitHub 存储库中的以下线程中跟踪:github.com/telerik/kendo-angular/issues/3502 切换到 Ivy 引擎后,问题将得到解决。
  • @MStephan我目前有完全相同的问题,不幸的是,将Grid更新到v7(应该是Ivy-ready,对吧?)并没有改变任何事情。它对任何人都有效吗?
  • 我在 Github 上开了一张票:github.com/telerik/kendo-angular/issues/3660
  • 我的票上有来自 Telerik 的相同答案。非常失望。

标签: jestjs angular13 kendo-angular-ui


【解决方案1】:

对于那些只是测试使用网格(实例化)的组件的人,您可以模拟它!

jest.mock('@progress/kendo-angular-grid');

【讨论】:

    猜你喜欢
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-11
    • 2017-09-29
    • 2018-09-19
    相关资源
    最近更新 更多