角2单元测试:找不到名称“描述”
我下面this tutorial from angular.io角2单元测试:找不到名称“描述”
正如他们所说,我创建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);
});
});
单位测试工作就像一个魅力。问题是:我看到一些错误,这是在教程中提到:
我们的编辑器和编译器可能会抱怨说,他们不知道什么
it
和expect
是因为他们缺乏描述 茉莉花打字文件。我们现在可以忽略那些烦人的投诉,因为它们是无害的。
而且他们确实忽略了它。即使这些错误是无害的,当我收到一堆错误时,它在我的输出控制台中看起来不太好。是我所得到
例子:
找不到名称 '描述'。
找不到'it'这个名字。
找不到'expect'的名字。
我该怎么办才能修复它?
我希望你已经安装 -
npm install --save-dev @types/jasmine
然后把下面的导入在hero.spec.ts
文件的顶部 -
import {} from 'jasmine';
应该解决的问题。
如果在Windows PowerShell中,您必须执行'npm install --save-dev'@ types/jasmine“'(注意双引号)或将引发错误 – aesede
根据Typescript的版本要求您可能需要安装较早的版本。例如对于我目前使用的离子v2.2.1使用的是typescript v2.0.9,我需要安装'@ types/jasmine @ 2.5.41'。否则,你可能会看到[这些编译错误](https://github.com/DefinitelyTyped/DefinitelyTyped/issues/14569)。 –
你可以为它的副作用导入模块:'import'jasmine';' – camolin3
你需要安装茉莉花的打字。假设你是一个相对较新的版本打字稿2,你应该能够做到:
npm install --save-dev @types/jasmine
解决这一问题,在他的回答是什么@Pace has written连接。但是,这并不能解释所有事情,如果你不介意的话,我会自己写。
SOLUTION:
添加此行:
///<reference path="./../../../typings/globals/jasmine/index.d.ts"/>
在hero.spec.ts
文件的开始修复问题。路径导致typings
文件夹(所有类型都存储在此处)。
要安装您需要创建typings.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包)。
这是做这件事的非标准方法。默认的tslint规则将阻止引用路径。使用tsconfig文件指向node_modules – FlavorScape
使用[email protected]或更高版本,您可以使用npm install @types/jasmine
安装类型,然后使用tsconfig.json
中的types
选项自动导入类型。
"types": ["jasmine"],
此解决方案在每个spec文件中不需要import {} from 'jasmine';
。
,它不需要添加'“类型”:[“jasmine”]'线了。 “默认情况下,所有可见的”@types“包都包含在编译中,任何包含文件夹的node_modules/@类中的包都被视为可见的;具体来说,这意味着./node_modules/@types/,../node_modules/@类型/,../../node_modules/@types/,等等。“ – bholben
@bholben我知道,但由于某种原因'节点'和'茉莉花'类型没有检测到。至少它不适用于我,我正在使用[email protected] –
该解决方案对我来说不起作用:(对不起,我在'ang-app/e2e/tsconfig.json'中使用了它。它在每一个json level_。你可以请添加更多的细节? – Sergii
npm install @types/jasmine
正如一些评论已经不再需要了"types": ["jasmine"]
提到的,所有@types
包自动包含在汇编(自V2.1我认为)。
在我看来,最简单的方法是排除在tsconfig.json像测试文件:
"exclude": [
"node_modules",
"**/*.spec.ts"
]
这对我的作品。
官方tsconfig docs的更多信息。
随着[email protected]或更高版本可以安装类型与故宫安装
npm install --save-dev @types/jasmine
然后导入类型自动使用typeRoots在tsconfig.json选项。
"typeRoots": [
"node_modules/@types"
],
此解决方案不需要从'jasmine'导入{};在每个spec文件中。
我到最新的今天,发现,解决它的最好方法是什么也不做......没有typeRoots
没有types
没有exclude
没有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集。我没有直接使用它,所以不用担心兼容性问题。希望以后不要烧我。
在我的情况下,解决方案是删除我的tsconfig.json
中的typeRoots
。
正如你可以在TypeScript doc
如果指定typeRoots读取,只能在typeRoots软件包将被包括在内。
看进口也许你有一个循环依赖,这是在我的情况的错误,使用import {} from 'jasmine';
将修复控制台中的错误,并进行代码编译,但没有消除恶魔的根源(以我的案例循环依赖)。
你可以在Github上来修复这个bug:https://github.com/TypeStrong/atom-typescript/issues/1125 –