Angular 2unit testing:找不到名字'describe'
我正在从angular.io继续这个教程
正如他们所说,我已经创build了hero.spec.ts文件来创buildunit testing:
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); }); });
unit testing就像一个魅力。 问题是:我看到一些错误,在教程中提到:
我们的编辑和编译器可能会抱怨说,他们不知道
it
和expect
是什么it
因为他们缺乏描述茉莉花的打字文件。 现在我们可以无视那些烦人的投诉,因为它们是无害的。
他们确实忽视了它。 即使这些错误是无害的,当我收到他们一堆时,在我的输出控制台中看起来不太好。
我得到的例子:
找不到名字“describe”。
找不到名字“it”。
找不到名字“expect”。
我能做些什么来解决它?
我希望你已经安装 –
npm install --save-dev @types/jasmine
然后把下面的导入在hero.spec.ts
文件的顶部 –
import {} from 'jasmine';
它应该解决这个问题。
使用Typescript@2.0或更高版本,可以使用npm install @types/jasmine
,然后使用tsconfig.json
的types
选项自动导入types。
"types": ["jasmine"],
这个解决scheme不需要import {} from 'jasmine';
在每个spec文件中。
你需要安装茉莉花的打字。 假设你在打字稿2的相对较新的版本,你应该能够做到:
npm install --save-dev @types/jasmine
正如在一些评论中提到的, "types": ["jasmine"]
不再需要了,所有的@types
包都会自动包含在编译中(我认为是v2.1)。
在我看来,最简单的解决scheme是排除你的tsconfig.json中的testing文件,如:
"exclude": [ "node_modules", "**/*.spec.ts" ]
这对我有用。
进一步的信息在官方tsconfig文档 。
解决这个问题的方法与@Pace在他的答案中写的有关。 但是,这并不能解释所有的事情,如果你不介意的话,我会自己写。
解:
添加这一行:
///<reference path="./../../../typings/globals/jasmine/index.d.ts"/>
在hero.spec.ts
文件的开头修复了问题。 path导致types文件夹(所有types存储)。
要安装types,您需要在项目的根目录下创buildtypings.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" } }
并运行typestypings install
(其中types是NPM包)。
使用Typescript@2.0或更高版本,您可以使用npm install来安装types
npm install --save-dev @types/jasmine
然后使用tsconfig.json中的typeRoots选项自动导入types。
"typeRoots": [ "node_modules/@types" ],
这个解决scheme不需要从'jasmine'导入; 在每个spec文件中。
我是今天最新的,发现解决这个问题的最好办法是什么都不做… no typeRoots
no types
no exclude
no include
所有的默认值似乎工作得很好。 事实上,直到我把它们全部删除之后,它才适合我。 我有: "exclude": [ "node_modules" ]
但在默认情况下,所以我删除了。
我有: "types": [ "node" ]
通过一些编译器警告。 但现在我也删除了。
不应该的警告是: error TS2304: Cannot find name 'AsyncIterable'.
从node_modules\@types\graphql\subscription\subscribe.d.ts
这是非常讨厌的,所以我在tsconfig中这样做,以便加载它: "compilerOptions": { "target": "esnext", }
因为它在esnext集。 我没有直接使用它,所以不用担心兼容性问题。 希望以后不要烧我。