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就像一个魅力。 问题是:我看到一些错误,在教程中提到:

我们的编辑和编译器可能会抱怨说,他们不知道itexpect是什么it因为他们缺乏描述茉莉花的打字文件。 现在我们可以无视那些烦人的投诉,因为它们是无害的。

他们确实忽视了它。 即使这些错误是无害的,当我收到他们一堆时,在我的输出控制台中看起来不太好。

我得到的例子:

找不到名字“describe”。

找不到名字“it”。

找不到名字“expect”。

我能做些什么来解决它?

我希望你已经安装 –

npm install --save-dev @types/jasmine

然后把下面的导入在hero.spec.ts文件的顶部 –

import {} from 'jasmine';

它应该解决这个问题。

使用Typescript@2.0或更高版本,可以使用npm install @types/jasmine ,然后使用tsconfig.jsontypes选项自动导入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集。 我没有直接使用它,所以不用担心兼容性问题。 希望以后不要烧我。