如何让WebStorm识别Jasmine方法?

138
我有一个node.js项目,其中包含一些Jasmine规范。这些规范在spec/子目录中,并具有.spec.coffee扩展名,正如jasmine-node所要求的那样。
当我在WebStorm IDE中打开我的某个规范文件时,所有对beforeEachdescribeit的调用都会显示为带有蓝色波浪线的下划线,并显示工具提示:"未解析的函数或方法 it()"。因此,即使我正在使用3.0 EAP,它应该具有某些Jasmine支持,但它并没有自动识别出这是一个Jasmine规范文件。
我尝试进入 文件 > 设置 > JavaScript库,并将Jasmine添加为库(指定路径到 jasmine-2.0.0.rc1.js),然后进入使用范围子页面,并在“项目”旁边的下拉列表中选中“Jasmine”,但这没有任何效果——Jasmine方法仍然显示为未解析状态。
如何告诉WebStorm,spec子目录中的所有文件和/或具有.spec.coffee扩展名的所有文件都是Jasmine测试,并让它识别这些测试正在使用的Jasmine API?

我在3.0 EAP中遇到了同样的问题。这就是为什么我正在使用2.1.5的原因。 - Microfed
您应该将此作为问题提交到 http://youtrack.jetbrains.net/issues/WI,以便开发人员在未来的版本中解决这些情况。 - CrazyCoder
@Microfed,你是说2.1.5会自动识别Jasmine测试吗?这是一个已经被记录的错误吗? - Joe White
7个回答

241

您可以在Webstorm/PHPStorm/Idea中使用预定义的JS库存根

  • 打开文件 > 设置...
  • 选择语言和框架 > JavaScript > 库
  • 单击下载...

JavaScript Library settings

  • 切换到TypeScript社区存根
  • 找到karma-jasmine (原名为jasmine) (如果不起作用,请尝试使用jasmine替代)
  • 单击下载并安装

enter image description here

我正在使用Jasmine 2.0进行此设置


2
它被称为 karma-jasmine,他们仅仅改了名字以帮助我们找到它。 - Andrzej Rehmann
7
对我来说无效。 "describe","beforeEach","it" 仍然带有灰色下划线。 - BuildTester1
36
如果您不使用 karma,您可以直接下载“jasmine”库。在尝试了 karma-jasmine 后,这是我所用的解决方法。 - Doug Seelinger
22
尽管我在使用 karma,但我必须下载 jasmine 才能使它工作。 karma-jasmine 无法正常工作。 - Didier L
3
最后一步 - 重新启动 IDE - Sava Jcript
显示剩余9条评论

30
在使用WebStorm 2016.1.1的mac上,我执行了以下步骤:
  1. 打开偏好设置(WebStorm->Preference或[command +,])
  2. 转到“库和框架”->“javascript”->“库”
  3. 下载
  4. 从列表中选择“jasmine-DefinitelyTyped”

Jasmine support added to webstorm


4
它在我的 Mac 上起作用了,但我需要关闭并重新启动 WebStorm。 - Jim
我在Windows机器上使用IntelliJ 2016.3下载了jasmine库,并且它可以正常工作,甚至无需重新启动。 - Jelle den Burger
我还必须将“类型”从全局更改为项目。安装后双击库名称,然后更改“可见性”设置。 - providencemac

6
请注意,如果您正在使用像WebStorm这样的代码质量工具(例如JSHint),添加全局jasmin/karma-jasmine库并不能解决JSHint错误。
您需要通过WebStorm的菜单系统(Lang & Frameworks>JavaScript>Code Quality Tools>JSHint)访问JSHint设置,并勾选复选框以使其知道其运行环境。 JSHint setting

我的环境中缺少了Jasmine。你的环境中是怎么出现的? - Aseem Bansal
@AseemBansal 你使用的 jshint 版本是什么? - prasanthv
我正在使用2.5.10版本。 - Aseem Bansal

4

使用TypeScript(和Angular2),你只需要在WebStorm设置中启用TypeScript编译器...

设置 > 语言和框架 > TypeScript...

在编译器标题下的复选框中勾选...

启用TypeScript编译器...

(我还点击了使用tsconfig.json单选按钮)

Jasmine方法现在将被识别。


这个解决方案的问题在于我不想让 WebStorm 编译我的 TypeScript,因为我正在使用 Webpack - theblang
有趣的是,如果我创建一个Angular CLI项目作为一个新项目,那么它就能够识别它们。我不确定有什么不同。 - theblang
我使用gulp来转译我的TypeScript代码,如果你正确设置了tsconfig.json文件,那么TypeScript将不会生成输出文件,它只会在IDE中验证代码。 - danday74
对我有用。别忘了勾选tsconfig.json。 - Michael Kornelakis
这对我来说几乎没有错误。但是,当我这样做时,从WebStorm中的Typescript编译器标签中获得此错误输出:错误:错误:解析tsconfig错误[{"messageText":"Unknown compiler option 'baseUrl'.","category":1,"code":5023},{"messageText":"Unknown compiler option 'lib'.","category":1,"code":5023},{"messageText":"Unknown compiler option 'typeRoots'.","category":1,"code":5023}] - Nikola Schou
我和你一样遇到了相同的问题,第一个答案是:“tsconfig.js文件中未包含对应的文件”,但我已经按照你建议的做了。 - Samuel Thompson

4
这可能是由于缺少依赖项引起的(如果您正在使用TypeScript进行开发)。
请确保安装了@types/jasmine
npm install --save-dev @types/jasmine

2

如果您使用 Angular CLI 生成项目后遇到此问题,请前往 文件 -> 设置 -> 语言和框架 -> JavaScript -> 库 并检查 {your-project-name}/node_modules


0
为了找到答案,我在我的项目根目录和在Webstorm中创建的一个新的Angular CLI项目上运行了DiffMerge,它正确地检测到了jasmine类型。
我发现,tsconfig.jsontsconfig.spec.json文件来自我的项目定义了typeRootstypes,而另一个项目没有。

enter image description here

typeRoots选项的行为是:

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

Types的行为类似。

Typescript文档继续说:

默认情况下,所有可见的“@types”包都包含在编译中。任何封闭文件夹的node_modules/@types中的包都被视为可见。

因此,对于我的项目来说,这种行为已经足够好了。从我的tsconfig.jsontsconfig.spec.json文件中删除typeRootstypes立即解决了这个问题。

是的,在tsconfig.spec.json中声明了jasmine的types。是的,它被设置为扩展tsconfig.json

在这种情况下,这并不重要。有一天它突然停止工作了。可能是由于Typescript升级,但我不能确定。如果有人知道原因,请在下面留言,我很好奇。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接