作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在将 Angular 应用程序从 v6 迁移到 v7。除了比较枚举的任何测试外,一切都很好。当我运行我的测试时,我得到很多关于我的枚举的错误
ERROR in src/.../some-thing.component.spec.ts: error TS2345: Argument of type 'PlanDuration.SixMonths' is not assignable to parameter of type 'Expected<PlanDuration.TwelveMonths>'.
正在运行的测试示例如下所示:
export enum PlanDuration {
SixMonths,
TwelveMonths
}
...
it('should toggle plan duration to six months if the event source id is the toggle duration and the event is not checked', () => {
component.selectedPlanDuration = PlanDuration.TwelveMonths;
component.handleToggle(event);
expect(component.selectedPlanDuration).toBe(PlanDuration.SixMonths); // Tests cannot run because of errors here
});
但是,如果我将我的枚举转换为数字,我的测试将完美运行!像这样在任何地方更新我的规范不太理想:
expect(component.selectedPlanDuration).toBe(<number> PlanDuration.SixMonths);
我不确定我是否遗漏了 package.json
中的某些内容。我将一个新的 angular 7 项目与我自己的项目进行了比较,它们之间的 angular core、typescript、jasmine 和 karma 版本是相同的。
如何让我的测试正确比较枚举?下面是我的package.json
"dependencies": {
"@angular/animations": "~7.2.0",
"@angular/common": "~7.2.0",
"@angular/compiler": "~7.2.0",
"@angular/core": "~7.2.0",
"@angular/forms": "~7.2.0",
"@angular/http": "~7.2.0",
"@angular/platform-browser": "~7.2.0",
"@angular/platform-browser-dynamic": "~7.2.0",
"@angular/router": "~7.2.0",
"core-js": "^2.5.4",
"rxjs": "~6.4.0",
"tslib": "^1.9.0",
"zone.js": "~0.8.26",
"@angular/cdk": "^7.0.3",
"@angular/flex-layout": "7.0.0-beta.24",
"@angular/material": "7.3.6",
"hammerjs": "2.0.8",
"intl": "1.2.5",
"jshashes": "1.0.7",
"lodash-es": "4.17.11",
"request-promise-native": "1.0.5",
"stream": "0.0.2",
"timers": "0.1.1",
"url-search-params-polyfill": "5.0.0",
"xml2js": "0.4.19"
},
"devDependencies": {
"@angular-devkit/build-angular": "~0.13.0",
"@angular/cli": "~7.3.7",
"@angular/compiler-cli": "~7.2.0",
"@angular/language-service": "~7.2.0",
"@types/node": "~8.9.4",
"@types/jasmine": "~2.8.8",
"@types/jasminewd2": "~2.0.3",
"codelyzer": "~4.5.0",
"jasmine-core": "~2.99.1",
"jasmine-spec-reporter": "~4.2.1",
"karma": "~4.0.0",
"karma-chrome-launcher": "~2.2.0",
"karma-coverage-istanbul-reporter": "~2.0.1",
"karma-jasmine": "~1.1.2",
"karma-jasmine-html-reporter": "^0.2.2",
"protractor": "~5.4.0",
"ts-node": "~7.0.0",
"tslint": "~5.11.0",
"typescript": "~3.2.2",
"@types/lodash-es": "4.17.1",
"gulp": "3.9.1",
"gulp-stylelint": "7.0.0",
"jasmine-data-provider": "2.2.0",
"karma-cli": "1.0.1",
"karma-junit-reporter": "1.2.0",
"karma-parallel": "0.3.0",
"karma-spec-reporter": "0.0.32",
"lodash": "4.17.11",
"moment": "2.22.2",
"npm": "6.0.0",
"protractor-beautiful-reporter": "1.2.5",
"protractor-jasmine2-screenshot-reporter": "0.5.0",
"stylelint": "9.6.0",
"stylelint-order": "1.0.0",
"tslint-jasmine-noSkipOrFocus": "1.0.9"
}
tsconfig.json:
{
"compileOnSave": false,
"compilerOptions": {
"importHelpers": true,
"preserveConstEnums": true,
"outDir": "./dist/out-tsc",
"baseUrl": "src",
"sourceMap": true,
"declaration": false,
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"noUnusedLocals": true,
"target": "es5",
"typeRoots": [
"node_modules/@types"
],
"lib": [
"es2016",
"dom"
]
}
}
tsconfig.spec.json
{
"extends": "../tsconfig.json",
"compilerOptions": {
"outDir": "../out-tsc/spec",
"module": "commonjs",
"target": "es5",
"baseUrl": "",
"types": [
"jasmine",
"node"
]
},
"files": [
"test.ts",
"polyfills.ts"
],
"include": [
"**/*.spec.ts",
"**/*.d.ts"
]
}
最佳答案
不久前我遇到了一个问题,Angular 告诉我它无法访问 MyEnumValue of undefined
。经过一些调整后,我发现将所有枚举导出为 const
,并将 "preserveConstEnums": true
添加到我的 tsconfig.json 中使其工作正常。
但除非另有说明,否则枚举始终是数字,谢天谢地不需要强制转换,但 Typescript 的枚举编译有时可能很时髦,就像接口(interface)很时髦一样。
编辑:
在您的组件中,确保:
// If you give this a default value, TypeScript will assume
// that the only "valid" type is PlanDuration.TwelveMonths
// Type evaluates to: PlanDuration | number between 0 and 1;
selectedPlanDuration: PlanDuration = PlanDuration.TwelveMonths;
// Type evaluates to: PlanDuration.TwelveMonths | 1;
selectedPlanDuration = PlanDuration.TwelveMonths
关于angular - 从 6 到 7 的 Angular 迁移后无法比较 Jasmine 中的枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55388259/
我是一名优秀的程序员,十分优秀!