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

我能做些什么来弥补呢?


当前回答

只需添加到您的tsconfig。Json,确保没有"**/*.spec.ts" 在排除

  "include": [
    "src/**/*.spec.ts",
    "src/**/*.d.ts"
  ]

我的工作tsconfig.json

其他回答

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

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

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

我希望你已经安装了

npm install --save-dev @types/jasmine

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

import '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之前导入的。

我建议你做同样的事情,删除这个文件,没有必要的配置是在里面。(注:如果你和我有同样的情况)

如果错误在.specs文件中 app/app.component.spec.ts(7,3):错误TS2304:无法找到名称“beforeEach”。

把它添加到你的文件顶部,然后NPM安装RXJS

import { range } from 'rxjs';
import { map, filter } from 'rxjs/operators';