Angular 无法识别 karma.conf.js
Angular Doesn't Recognize karma.conf.js
在一个商业项目中,测试已经 运行 一段时间了。我们在 Angular 8 中删除了一个版本。在 master 上,我们升级到 Angular 9。现在版本需要一个修补程序,所以我检查分支并 运行 测试。这都在同一个回购/文件系统目录中。
它像 Angular core has no exported member ɵɵFactoryDef
一样失败,我很快确定 error is due to CLI version incompatibility。
所以我全局卸载 ng CLI 并重新安装 npm i -g @angular/cli@8.2.0
,与发布分支 package.json 一致。现在上面的错误消失了,但是当我尝试 ng test
时,CLI 坚持认为 karma.conf 不存在。唯一的问题是,它确实存在。
我尝试过的其他事情:
rm -rf
和 npm i
从零开始
npm cache verify
- 关闭并重新打开终端
- 重启电脑
- 用不同的名称创建一个新的 karma.conf 并指向 angular.json
ng cli 确实尊重 angular.json,因为下面的错误会根据我的业力文件名和路径而改变,但它仍然继续坚持 MacOS,即以下文件不存在:
在 Mac 上,我仍然得到:
ERROR [config]: File /Users/<various paths that totally exist>/src/karma.<tried different things here>.js does not exist!
有什么想法吗?谢谢!!
--- 编辑:根据请求在下方添加一些技术信息。
来自 angular.json
的测试块:
"test": {
"builder": "@angular-devkit/build-angular:karma",
"options": {
"main": "src/test.ts",
"polyfills": "src/polyfills.ts",
"tsConfig": "src/tsconfig.spec.json",
"codeCoverage": true,
"karmaConfig": "src/karma.conf.js",
"scripts": ["node_modules/jquery/dist/jquery.js", "node_modules/jquery-mockjax/dist/jquery.mockjax.js"],
"assets": [
"src/favicon.ico",
{
"glob": "**/*.html",
"input": "./src/legacy",
"output": "./"
}
]
}
}
部分客户端文件夹结构。请注意 storybook/
和 test/
是 src/
的兄弟姐妹,而 angular.json 比 `src/ 高一级。我已经尝试过一些业力路径突变,包括:
"karmaConfig": "./src/karma.conf.js",
"karmaConfig": "../../<correct folders>src/karma.conf.js",
"karmaConfig": "src/karma.<change this>.js",
您可能已经完成了这项检查,但是您是否尝试过更新您的 package.json
以拥有 karma.conf 的路径,就像这样...?
"scripts": {
"test": "karma start ./path_to_karma.conf.js"
}
在问题中提到的步骤之后,这最终为我解决了问题:
- 删除整个仓库
- 重新克隆(其实我做了一个浅克隆
git clone <repo-url>.git --branch <ng8-branch> --depth 5
- 重新安装
npm i
现在 ng test
按预期工作。
在一个商业项目中,测试已经 运行 一段时间了。我们在 Angular 8 中删除了一个版本。在 master 上,我们升级到 Angular 9。现在版本需要一个修补程序,所以我检查分支并 运行 测试。这都在同一个回购/文件系统目录中。
它像 Angular core has no exported member ɵɵFactoryDef
一样失败,我很快确定 error is due to CLI version incompatibility。
所以我全局卸载 ng CLI 并重新安装 npm i -g @angular/cli@8.2.0
,与发布分支 package.json 一致。现在上面的错误消失了,但是当我尝试 ng test
时,CLI 坚持认为 karma.conf 不存在。唯一的问题是,它确实存在。
我尝试过的其他事情:
rm -rf
和npm i
从零开始npm cache verify
- 关闭并重新打开终端
- 重启电脑
- 用不同的名称创建一个新的 karma.conf 并指向 angular.json
ng cli 确实尊重 angular.json,因为下面的错误会根据我的业力文件名和路径而改变,但它仍然继续坚持 MacOS,即以下文件不存在:
在 Mac 上,我仍然得到:
ERROR [config]: File /Users/<various paths that totally exist>/src/karma.<tried different things here>.js does not exist!
有什么想法吗?谢谢!!
--- 编辑:根据请求在下方添加一些技术信息。
来自 angular.json
的测试块:
"test": {
"builder": "@angular-devkit/build-angular:karma",
"options": {
"main": "src/test.ts",
"polyfills": "src/polyfills.ts",
"tsConfig": "src/tsconfig.spec.json",
"codeCoverage": true,
"karmaConfig": "src/karma.conf.js",
"scripts": ["node_modules/jquery/dist/jquery.js", "node_modules/jquery-mockjax/dist/jquery.mockjax.js"],
"assets": [
"src/favicon.ico",
{
"glob": "**/*.html",
"input": "./src/legacy",
"output": "./"
}
]
}
}
部分客户端文件夹结构。请注意 storybook/
和 test/
是 src/
的兄弟姐妹,而 angular.json 比 `src/ 高一级。我已经尝试过一些业力路径突变,包括:
"karmaConfig": "./src/karma.conf.js",
"karmaConfig": "../../<correct folders>src/karma.conf.js",
"karmaConfig": "src/karma.<change this>.js",
您可能已经完成了这项检查,但是您是否尝试过更新您的 package.json
以拥有 karma.conf 的路径,就像这样...?
"scripts": {
"test": "karma start ./path_to_karma.conf.js"
}
在问题中提到的步骤之后,这最终为我解决了问题:
- 删除整个仓库
- 重新克隆(其实我做了一个浅克隆
git clone <repo-url>.git --branch <ng8-branch> --depth 5
- 重新安装
npm i
现在 ng test
按预期工作。