Angular v15 npm 运行测试在 CI/CD 机器中失败,并出现错误“Uncaught TypeError: __webpack_require__(...).context is not a function”

kan*_* op 5 testing angular cicd angular15

将 Angular 从 v14 更新到 v15 后,我看到 Angular CLI 从 src/test.ts 文件中删除了行。这些行是:

declare const require: {
    context(path: string, deep?: boolean, filter?: RegExp): {
        <T>(id: string): T;
        keys(): string[];
    };
};
Run Code Online (Sandbox Code Playgroud)

// Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);
// And load the modules.
context.keys().forEach(context);
Run Code Online (Sandbox Code Playgroud)

这当然导致“npm run test”命令在本地失败,因为测试文件没有明确提供给 Angular。所以我将线路添加回来,一切都开始在本地工作。CI/CD 机器无法再运行“npm run test”命令。该命令将以下内容打印到标准输出:

29 11 2022 13:00:59.161:INFO [karma-server]: Karma v6.3.20 server started at http://localhost:9876/
29 11 2022 13:00:59.167:INFO [launcher]: Launching browsers ChromeHeadlessNoSandbox with concurrency unlimited
29 11 2022 13:00:59.172:INFO [launcher]: Starting browser ChromeHeadless
29 11 2022 13:00:59.649:INFO [Chrome Headless ip.ip.ip.ip (Linux x86_64)]: Connected on socket sockedId with id ID
Chrome Headless ip.ip.ip.ip (Linux x86_64): Executed 0 of 0 SUCCESS (0 secs / 0 secs)
Chrome Headless ip.ip.ip.ip (Linux x86_64) 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:25:25)
      at __webpack_require__ (http://localhost:9876/_karma_webpack_/webpack:/webpack/bootstrap:19:1)
      at __webpack_exec__ (http://localhost:9876/_karma_webpack_/main.js:67164:48)
      at http://localhost:9876/_karma_webpack_/main.js:67165: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:67166:56
      at webpackJsonpCallback (http://localhost:9876/_karma_webpack_/webpack:/webpack/runtime/jsonp chunk loading:34:1)
Run Code Online (Sandbox Code Playgroud)

不知道是什么造成了这个问题。CI/CD 机器上的缓存已被清除。

尝试添加回从 v14->v15 进行角度更新删除的行,它在本地解决了问题,而不是在 CI/CD 机器上。

编辑/更新: “ng test”现在也随机停止在我的本地计算机上工作。我摆弄了 test.ts、angular.json 和 karma.conf.js conf 文件,并再次删除了 Angular CLI 之前从 test.ts 中删除的行。现在可以在本地运行测试了。现在测试也可以在 CI/CD 机器上运行。诡异的...

小智 1

我遇到了这个问题,只有在将我的代码与他们的启动项目进行比较后才修复它:https://angular.io/ generated/live-examples/testing/stackblitz.html 。

在 Angular 15 中,他们完全删除了tests.ts。您应该删除该文件,然后编辑 Angular.json 以不引用它(只需删除“main”:“src/test.ts”选项)。

  • 也许您忘记还包括 zone.js/testing?如果您查看示例项目,它们在 test.options 下有:“polyfills”:[“zone.js”,“zone.js/testing”]。 (2认同)