我跟随this tutorial from 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);
});
});
单元测试就像魅力一样。问题是:我看到了一些错误,这些错误在教程中提到:
我们的编辑和编译器可能会抱怨他们不知道
it
和expect
是因为他们缺少描述的输入文件 茉莉花。我们现在可以忽略那些烦人的抱怨 无害。
他们确实忽略了它。即使这些错误是无害的,但当我收到大量错误时,它在我的输出控制台中看起来并不好看。
我得到的例子:
找不到姓名'描述'。
找不到名字'它'。
找不到姓名'期待'。
我该怎么做才能解决它?
答案 0 :(得分:350)
我希望你已经安装了 -
npm install --save-dev @types/jasmine
然后将以下导入放在hero.spec.ts
文件的顶部 -
import 'jasmine';
它应该解决问题。
答案 1 :(得分:142)
使用Typescript@2.0或更高版本,您可以使用以下命令安装类型:
npm install -D @types/jasmine
然后使用types
中的tsconfig.json
选项自动导入类型:
"types": ["jasmine"],
此解决方案在每个spec文件中不需要import {} from 'jasmine';
。
答案 2 :(得分:24)
npm install @types/jasmine
如某些评论所述,不再需要"types": ["jasmine"]
,所有@types
包都会自动包含在编译中(因为我认为是v2.1)。
在我看来,最简单的解决方案是排除 tsconfig.json 中的测试文件,如:
"exclude": [
"node_modules",
"**/*.spec.ts"
]
这适合我。
官方tsconfig docs中的更多信息。
答案 3 :(得分:13)
您需要为茉莉花安装打字。假设您使用的是相对较新版本的typescript 2,您应该能够:
npm install --save-dev @types/jasmine
答案 4 :(得分:7)
使用Typescript@2.0或更高版本,您可以使用npm install
安装类型npm install --save-dev @types/jasmine
然后使用tsconfig.json中的 typeRoots 选项自动导入类型。
"typeRoots": [
"node_modules/@types"
],
此解决方案不需要来自'jasmine'的import {};在每个spec文件中。
答案 5 :(得分:3)
此问题的解决方案与答案中的@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包)。
答案 6 :(得分:3)
我已达到今天的最新状态,并发现解决此问题的最佳方法是不做任何事......不typeRoots
否types
否exclude
否{{1所有默认值似乎都正常工作。实际上,除非将它们全部删除,否则它不适合我。我有:
include
但这是默认值,所以我删除了它。
我有:
"exclude": [
"node_modules"
]
通过一些编译器警告。但现在我也将其删除了。
不应该的警告是:
"types": [
"node"
]
来自error TS2304: Cannot find name 'AsyncIterable'.
这是非常讨厌的,所以我在tsconfig中这样做,以便加载它:
node_modules\@types\graphql\subscription\subscribe.d.ts
因为它在esnext集中。我没有直接使用它,所以不用担心兼容性问题。希望以后不会烧我。
答案 7 :(得分:3)
答案 8 :(得分:1)
只需执行以下操作即可在 Lerna Mono-repo 中获取@types 存在多个node_modules的地方。
npm install -D @types/jasmine
然后在每个模块或应用程序的每个tsconfig.file中
"typeRoots": [
"node_modules/@types",
"../../node_modules/@types" <-- I added this line
],
答案 9 :(得分:0)
看看导入可能你有一个循环依赖,这在我的情况下是错误,使用import {} from 'jasmine';
将修复控制台中的错误并使代码可编译但不会删除魔鬼的根源(在我的例子中是循环依赖)。
答案 10 :(得分:0)
我正在使用Angular 6,Typescript 2.7,并且正在使用Jest框架进行单元测试。
我安装了@types/jest
,并添加到了typeRoots
内的tsconfig.json
上
但是下面仍然有显示错误(即:在终端上没有错误)
找不到名称描述
并添加导入:
import {} from 'jest'; // in my case or jasmine if you're using jasmine
从技术上讲什么也没做,所以我认为某个地方有导入会导致此问题,然后我发现,如果删除文件
tsconfig.spec.json
src/
文件夹中的为我解决了该问题。由于@types是在rootTypes之前导入的。
我建议您执行相同的操作并删除此文件,因为其中没有所需的配置。 (ps:如果您和我的情况相同)
答案 11 :(得分:0)
为使TypeScript编译器在编译期间使用所有可见的类型定义,应从root
brands
brand_0 //created with .childByAutoId
brand: "7 days"
product_0: true //products should probably be in a child node
product_1: true
brand_1
brand: "Zomo"
product_0: true
product_1: true
all_products
product_0
name: "Tabak1"
brand_0: true
brand_1: true
product_1
name: "Tabak2"
brand_0: true
brand_1: true
文件的types
字段中完全删除compilerOptions
选项。
当tsconfig.json
字段中存在一些types
条目而同时缺少compilerOptions
条目时,就会出现此问题。
因此,为了解决此问题,jest
中的compilerOptions
字段应在tscongfig.json
区域中包含jest
或完全删除types
:
types
答案 12 :(得分:0)
我将在“打字稿”中添加对我有用的答案:“ 3.2.4”我意识到在node_modules / @ types中的茉莉花在茉莉花类型下有一个ts3.1的文件夹,所以这里是步骤:-
npm install -D @types/jasmine
添加到tsconfig.json茉莉花/ts3.1
"typeRoots": [
...
"./node_modules/jasmine/ts3.1"
],
将茉莉花添加到类型中
"types": [
"jasmine",
"node"
],
注意: :不再需要此import 'jasmine';
。
答案 13 :(得分:0)
就我而言,在提供应用程序时(而非测试时)出现此错误。我没有意识到我在tsconfig.app.json文件中有不同的配置设置。
我以前有这个:
{
...
"include": [
"src/**/*.ts"
]
}
在提供该应用程序时,它包括了我所有的.spec.ts
文件。我更改了include property to
exclude`并添加了一个正则表达式以排除所有这样的测试文件:
{
...
"exclude": [
"**/*.spec.ts",
"**/__mocks__"
]
}
现在它可以正常工作了。
答案 14 :(得分:0)
如果错误在.specs文件中 app / app.component.spec.ts(7,3):错误TS2304:找不到名称“ beforeEach”。
将此添加到文件顶部,然后npm安装rxjs
从'rxjs'导入{range}; 从'rxjs / operators'导入{map,filter};