我从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”。

我能做些什么来弥补呢?


当前回答

看看导入,也许你有一个循环依赖,这是我的错误,使用import {} from 'jasmine';将修复控制台中的错误并使代码可编译,但不删除devil的根(在我的情况下是周期依赖)。

其他回答

这个问题的解决方案与@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)。

在我的例子中,解决方案是删除tsconfig.json中的typeroot。

正如你可以在TypeScript文档中读到的

如果指定了typeRoots,则只包含typeRoots下的包。

我只会在“typescript”中添加对我有用的答案:“3.2.4”我意识到jasmine在node_modules/@types中有一个ts3.1的文件夹,在jasmine类型下,所以下面是步骤:-

安装类型为jasmine npm 添加到tsconfig。json茉莉花/ ts3.1 “typeRoots”:( ... ”。/ node_modules /茉莉花/ ts3.1” ], 将Jasmine添加到类型中 “类型”:[ “茉莉花”, “节点” ],

注意:不需要导入'jasmine';了。

您需要为jasmine安装类型。假设你使用的是相对较新的typescript 2版本,你应该能够做到:

npm install --save-dev @types/jasmine

我在angular库中遇到了这个错误。结果发现我不小心在public-api.ts的导出中包含了.spec文件。删除输出修复了我的问题。