Karma Jasmine - 未捕获类型错误:__webpack_require__(...).context 不是函数

Jar*_*cio 34 javascript karma-jasmine webpack angular

我试图更新我的整个项目依赖项,并设法做到这一点,但是当我尝试运行测试时,ng test --no-watch它们不起作用,给我以下错误。

23 11 2022 12:33:58.268:INFO [Chrome Headless 107.0.5304.107 (Windows 10)]: Connected on socket JpJqOsJswlYxFGjeAAAB with id 12720855
Chrome Headless 107.0.5304.107 (Windows 10) ERROR
  An error was thrown in afterAll
  Uncaught TypeError: __webpack_require__(...).context is not a function
  TypeError: __webpack_require__(...).context is not a function
      at Object.4289 (http://localhost:9876/_karma_webpack_/webpack:/src/test.ts:18:25)
      at __webpack_require__ (http://localhost:9876/_karma_webpack_/webpack:/webpack/bootstrap:19:1)
      at __webpack_exec__ (http://localhost:9876/_karma_webpack_/main.js:10483:48)
      at http://localhost:9876/_karma_webpack_/main.js:10484:54
      at Function.__webpack_require__.O (http://localhost:9876/_karma_webpack_/webpack:/webpack/runtime/chunk loaded:23:1)
      at http://localhost:9876/_karma_webpack_/main.js:10485:56
      at webpackJsonpCallback (http://localhost:9876/_karma_webpack_/webpack:/webpack/runtime/jsonp chunk loading:71:1)
      at http://localhost:9876/_karma_webpack_/main.js:1:87
Chrome Headless 107.0.5304.107 (Windows 10): Executed 0 of 0 ERROR (0.106 secs / 0 secs)
Run Code Online (Sandbox Code Playgroud)

有趣的是,在更新之前它是如何完美运行的,突然之间 webpack 似乎无法找到上下文?为什么?

我更改的依赖项是:

旧的依赖项:

"dependencies": {
    "@angular/animations": "13.3.6",
    "@angular/cdk": "13.3.6",
    "@angular/common": "13.3.6",
    "@angular/compiler": "13.3.6",
    "@angular/core": "13.3.6",
    "@angular/forms": "13.3.6",
    "@angular/localize": "13.3.6",
    "@angular/platform-browser": "13.3.6",
    "@angular/platform-browser-dynamic": "13.3.6",
    "@angular/router": "13.3.6",
    "@auth0/angular-jwt": "5.0.2",
    "@fortawesome/angular-fontawesome": "0.10.2",
    "@fortawesome/fontawesome-svg-core": "6.1.1",
    "@fortawesome/free-regular-svg-icons": "6.1.1",
    "@fortawesome/free-solid-svg-icons": "6.1.1",
    "@ngrx/effects": "13.2.0",
    "@ngrx/router-store": "13.2.0",
    "@ngrx/store": "13.2.0",
    "@ngrx/store-devtools": "13.2.0",
    "@ngx-translate/core": "14.0.0",
    "bootstrap": "5.1.3",
    "core-js": "3.22.4",
    "ngx-bootstrap": "8.0.0",
    "@popperjs/core": "2.11.5",
    "primeng": "13.3.3",
    "rxjs": "7.5.5",
    "svg-to-pdfkit": "0.1.8",
    "tslib": "2.4.0",
    "ws-blueprint-api": "file:./build/stubs/domain-a-api",
    "zone.js": "0.11.5"
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "13.3.5",
    "@angular-eslint/builder": "13.2.1",
    "@angular-eslint/eslint-plugin": "13.2.1",
    "@angular-eslint/eslint-plugin-template": "13.2.1",
    "@angular-eslint/schematics": "13.2.1",
    "@angular-eslint/template-parser": "13.2.1",
    "@angular/cli": "13.3.5",
    "@angular/compiler-cli": "13.3.6",
    "@angular/language-service": "13.3.6",
    "@ngrx/schematics": "13.2.0",
    "@types/jasmine": "4.0.3",
    "@types/jasminewd2": "2.0.10",
    "@types/node": "17.0.31",
    "@typescript-eslint/eslint-plugin": "5.22.0",
    "@typescript-eslint/parser": "5.22.0",
    "cypress": "9.6.0",
    "cypress-multi-reporters": "1.6.0",
    "cypress-sonarqube-reporter": "1.10.0",
    "eslint": "8.15.0",
    "eslint-formatter-gitlab": "3.0.0",
    "eslint-plugin-import": "2.25.4",
    "eslint-plugin-jsdoc": "38.0.6",
    "eslint-plugin-prefer-arrow": "1.2.3",
    "jasmine-core": "4.1.0",
    "jasmine-spec-reporter": "7.0.0",
    "karma": "6.3.19",
    "karma-chrome-launcher": "3.1.1",
    "karma-coverage": "2.2.0",
    "karma-jasmine": "5.0.0",
    "karma-junit-reporter": "2.0.1",
    "karma-sonarqube-unit-reporter": "0.0.23",
    "mocha-junit-reporter": "2.0.2",
    "ngrx-store-freeze": "0.2.4",
    "ngx-translate-testing": "6.0.1",
    "prettier": "2.6.2",
    "start-server-and-test": "1.14.0",
    "ts-node": "10.7.0",
    "typescript": "4.6.4",
    "webpack-bundle-analyzer": "4.5.0"
  },
Run Code Online (Sandbox Code Playgroud)

新的依赖项:

"dependencies": {
    "@angular/animations": "15.0.0",
    "@angular/cdk": "15.0.0",
    "@angular/common": "15.0.0",
    "@angular/compiler": "15.0.0",
    "@angular/core": "15.0.0",
    "@angular/forms": "15.0.0",
    "@angular/localize": "15.0.0",
    "@angular/platform-browser": "15.0.0",
    "@angular/platform-browser-dynamic": "15.0.0",
    "@angular/router": "15.0.0",
    "@auth0/angular-jwt": "5.1.0",
    "@fortawesome/angular-fontawesome": "0.12.0",
    "@fortawesome/fontawesome-svg-core": "6.2.1",
    "@fortawesome/free-regular-svg-icons": "6.2.1",
    "@fortawesome/free-solid-svg-icons": "6.2.1",
    "@ngrx/effects": "14.3.2",
    "@ngrx/router-store": "14.3.2",
    "@ngrx/store": "14.3.2",
    "@ngrx/store-devtools": "14.3.2",
    "@ngx-translate/core": "14.0.0",
    "bootstrap": "5.2.2",
    "core-js": "3.26.1",
    "ngx-bootstrap": "9.0.0",
    "@popperjs/core": "2.11.6",
    "primeng": "14.2.2",
    "rxjs": "7.5.7",
    "svg-to-pdfkit": "0.1.8",
    "tslib": "2.4.1",
    "ws-blueprint-api": "file:./build/stubs/domain-a-api",
    "zone.js": "0.12.0"
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "15.0.0",
    "@angular-eslint/builder": "15.0.0",
    "@angular-eslint/eslint-plugin": "15.0.0",
    "@angular-eslint/eslint-plugin-template": "15.0.0",
    "@angular-eslint/schematics": "15.0.0",
    "@angular-eslint/template-parser": "15.0.0",
    "@angular/cli": "15.0.0",
    "@angular/compiler-cli": "15.0.0",
    "@angular/language-service": "15.0.0",
    "@ngrx/schematics": "14.3.2",
    "@types/jasmine": "4.3.0",
    "@types/jasminewd2": "2.0.10",
    "@types/node": "18.11.9",
    "@typescript-eslint/eslint-plugin": "5.43.0",
    "@typescript-eslint/parser": "5.43.0",
    "cypress": "11.1.0",
    "cypress-multi-reporters": "1.6.1",
    "cypress-sonarqube-reporter": "1.11.0",
    "eslint": "8.28.0",
    "eslint-formatter-gitlab": "4.0.0",
    "eslint-plugin-import": "2.26.0",
    "eslint-plugin-jsdoc": "39.6.2",
    "eslint-plugin-prefer-arrow": "1.2.3",
    "jasmine-core": "4.5.0",
    "jasmine-spec-reporter": "7.0.0",
    "karma": "6.4.1",
    "karma-chrome-launcher": "3.1.1",
    "karma-coverage": "2.2.0",
    "karma-jasmine": "5.1.0",
    "karma-junit-reporter": "2.0.1",
    "karma-sonarqube-unit-reporter": "0.0.23",
    "mocha-junit-reporter": "2.2.0",
    "ngrx-store-freeze": "0.2.4",
    "ngx-translate-testing": "6.1.0",
    "prettier": "2.7.1",
    "start-server-and-test": "1.14.0",
    "ts-node": "10.9.1",
    "typescript": "4.8.4",
    "webpack-bundle-analyzer": "4.7.0"
  },
Run Code Online (Sandbox Code Playgroud)

基本上把大部分都改成了最新的。我什至尝试恢复并尝试一一更新,但是一旦我更新角度它就崩溃了,为什么会这样呢?

提前致谢

don*_*jot 46

我遇到过同样的问题。由于某种原因,在我们的另一个应用程序中进行角度更新时,自动删除了 test.ts 中的一些代码,即:

   const context = require.context('./', true, /\.spec\.ts$/);
   context.keys().forEach(context);
Run Code Online (Sandbox Code Playgroud)

以及上面的 require 声明。

我在其他应用程序中手动执行此操作,到目前为止它有效。也许有人知道这种变化的原因。

  • 很好的解决方案,删除两行解决了我的问题。谢谢! (7认同)

小智 16

从 v14 升级到 v15 后,我的组件库也遇到了同样的问题。

不幸的是,从 git 历史记录中粘贴代码并没有解决我的 0 发现测试问题。

我的解决方案是删除项目/组件/src 中的 test.ts 文件及其在 tsconfig.spec.ts 的文件列表中的引用。此外,还需要对 angular.json 中的测试块进行补丁。以及 tsconfig.spec.ts 中的扩展包含模式列表

之前的 angular.json

{
  "builder": "@angular-devkit/build-angular:karma",
  "options": {
    "main": "projects/components/src/test.ts",
    "tsConfig": "projects/components/tsconfig.spec.json",
    "karmaConfig": "projects/components/karma.conf.js"
  }
}
Run Code Online (Sandbox Code Playgroud)

之后的 angular.json

{
  "builder": "@angular-devkit/build-angular:karma",
  "options": {
    "polyfills": [
      "zone.js",
      "zone.js/testing"
    ],
    "tsConfig": "projects/components/tsconfig.spec.json",
    "karmaConfig": "projects/components/karma.conf.js"
  }
}
Run Code Online (Sandbox Code Playgroud)

tsconfig.spec.ts 之前

{
    "files": [
        "src/test.ts"
    ],
    "include": [
        "**/*.spec.ts",
        "**/*.d.ts"
    ]
}
Run Code Online (Sandbox Code Playgroud)

tsconfig.spec.ts 之后

{
    "files": [
    ],
    "include": [
        "**/*.spec.ts",
        "**/*.d.ts",
        "**/*.ts"
    ]
}
Run Code Online (Sandbox Code Playgroud)