我从angular.io开始学习本教程
正如他们所说,我已经创建了hero.spec.ts文件来创建单元测试:
import { Hero } from './hero';
describe('Hero', () => {
it('has name', () => {
let hero: Hero = {id: 1, name: 'Super Cat'};
expect(hero.name).toEqual('Super Cat');
});
it('has id', () => {
let hero: Hero = {id: 1, name: 'Super Cat'};
expect(hero.id).toEqual(1);
});
});
单元测试工作起来很有魅力。问题是:我看到了一些错误,在教程中提到过:
我们的编辑和编译器可能会抱怨他们不知道它是什么
和期望,因为他们缺乏打字文件描述
茉莉花。我们可以暂时忽略那些恼人的抱怨
无害的。
他们确实忽略了这一点。尽管这些错误是无害的,但当我收到一堆错误时,在输出控制台中看起来并不好。
我得到的例子是:
无法找到名称“describe”。
找不到名字“it”。
找不到名称“expect”。
我能做些什么来弥补呢?
这个问题的解决方案与@Pace在他的回答中所写的内容有关。但是,它不能解释所有的事情,如果你不介意的话,我就自己写吧。
解决方案:
添加这一行:
///<reference path="./../../../typings/globals/jasmine/index.d.ts"/>
在hero.spec.ts文件的开头修复了问题。路径指向类型文件夹(所有类型都存储在其中)。
要安装类型,您需要创建类型。Json文件在根你的项目与以下内容:
{
"globalDependencies": {
"core-js": "registry:dt/core-js#0.0.0+20160602141332",
"jasmine": "registry:dt/jasmine#2.2.0+20160621224255",
"node": "registry:dt/node#6.0.0+20160807145350"
}
}
并运行typings install(其中typings是NPM package)。
在Typescript@2.0或更高版本中,你可以使用npm install来安装类型
npm install --save-dev @types/jasmine
然后使用tsconfig.json中的typeRoots选项自动导入类型。
"typeRoots": [
"node_modules/@types"
],
这个解决方案不需要import {} from 'jasmine';在每个规范文件中。
截至今天,我发现解决这个问题的最好方法是什么都不做……没有typeRoots,没有类型,没有排除,没有包括,所有的默认情况下似乎工作得很好。事实上,直到我把它们都去掉,它才对我起作用。我有:
"exclude": [
"node_modules"
]
但这是默认设置,所以我删除了它。
我有:
"types": [
"node"
]
来避开一些编译器警告。但现在我把它也去掉了。
不应该的警告是:
错误TS2304:找不到名称“AsyncIterable”。
从node_modules \ \ subscribe.d.ts @types \ graphql \订阅
这非常讨厌,所以我在tsconfig中这样做,以便它加载它:
"compilerOptions": {
"target": "esnext",
}
因为它在esnext集合中。我没有直接使用它,所以现在还不用担心兼容性问题。希望这不会让我以后很难受。
我使用的是Angular 6, Typescript 2.7,我使用Jest框架进行单元测试。
我已经安装了@types/jest,并添加在tsconfig.json中的typeRoots上
但仍然有下面的显示错误(即:在终端上没有错误)
无法找到名称描述
并添加导入:
import {} from 'jest'; // in my case or jasmine if you're using jasmine
技术上没有做任何事情,所以我想,有一个导入的地方导致这个问题,然后我发现,如果删除文件
tsconfig.spec.json
在src/文件夹中,为我解决了问题。因为@types是在rootTypes之前导入的。
我建议你做同样的事情,删除这个文件,没有必要的配置是在里面。(注:如果你和我有同样的情况)
为了让TypeScript编译器在编译过程中使用所有可见的类型定义,types选项应该完全从tsconfig中的compilerOptions字段中删除。json文件。
当compilerOptions字段中存在一些类型条目时,这个问题就会出现,而与此同时,笑话条目却缺失了。
所以为了解决这个问题,在你的tsconfig中输入compilerOptions字段。Json应该在类型区域中包含jest,或者完全摆脱类型:
{
"compilerOptions": {
"esModuleInterop": true,
"target": "es6",
"module": "commonjs",
"outDir": "dist",
"types": ["reflect-metadata", "jest"], //<-- add jest or remove completely
"moduleResolution": "node",
"sourceMap": true
},
"include": [
"src/**/*.ts"
],
"exclude": [
"node_modules"
]
}