我有一个包含一些 Jasmine 规范的 node.js 项目。根据 jasmine-node 的要求,规范位于 spec/ 子目录中并具有 .spec.coffee 扩展名。
当我在 WebStorm IDE 中打开我的规范文件之一时,对 beforeEach
和 describe
和 it
的所有调用都显示为带有蓝色波浪下划线和工具提示:“未解析的函数或方法 it()”。因此,即使我使用的是 3.0 EAP 并且它应该是 have some amount of Jasmine support,它也不会自动发现这是一个 Jasmine 规范文件这一事实。
我尝试进入 File > Settings > JavaScript Libraries,并将 Jasmine 添加为库(指定 jasmine-2.0.0.rc1.js 的路径),然后转到 Usage Scope 子页面并在“项目”旁边的下拉列表,但这没有效果 - Jasmine 方法仍然显示为未解决。
我如何告诉 WebStorm spec 子目录中的所有文件和/或扩展名为 .spec.coffee 的所有文件都是 Jasmine 测试,并让它识别这些测试正在使用的 Jasmine API?
您可以在 Webstorm/PHPStorm/Idea 中使用预定义的 JS 库存根
打开文件>设置...
选择语言和框架 > JavaScript > 库
点击下载...
https://i.stack.imgur.com/GZOvM.png
切换到 TypeScript 社区存根
找到 karma-jasmine (原名 jasmine)(如果这不起作用,请尝试 jasmine 代替)
点击下载并安装
https://i.stack.imgur.com/WS648.png
我将此设置与 Jasmine 2.0 一起使用
在带有 webstorm 2016.1.1 的 Mac 上,我执行了以下操作:
打开首选项(webstorm->preference 或 [command + ,])转到库和框架 -> javascript -> 库下载从列表中选择“茉莉花 - 绝对类型”
https://i.stack.imgur.com/TbOko.png
jasmine
库,并且它工作正常,即使 没有重新启动。
请注意,如果您在 WebStorm 中使用 JSHint 等代码质量工具,添加全局 jasmin/karma-jasmine 库并不能消除 JSHint 错误。
您需要通过 WebStorm 的菜单系统(Lang & Frameworks>JavaScript>Code Quality Tools>JSHint)访问 JSHint 设置,然后单击复选框以使其知道正在运行的环境。
https://i.stack.imgur.com/zczXm.png
使用 TypeScript(和 Angular2),您只需要在 WebStorm 设置中启用 TypeScript 编译器...
设置 > 语言和设置 > TypeScript ...
在编译器标题下勾选...
启用 TypeScript 编译器...
(我还点击了使用 tsconfig.json 单选)
茉莉花方法现在将被识别
WebStorm
编译我的 TypeScript
,因为我正在使用 Webpack
。
new project
作为 Angular CLI
项目,那么它会识别它们。我不确定有什么不同。
这也可能是由于缺少依赖项造成的(如果您使用 TypeScript 进行开发)。
确保您已安装 @types/jasmine
npm install --save-dev @types/jasmine
如果您在使用 Angular CLI
生成项目后遇到此问题,请转到 File -> Settings -> Languages & Frameworks -> JavaScript -> Libraries
并检查 {your-project-name}/node_modules
。
为了找到这个问题的答案,我在我的项目根目录上运行了 DiffMerge,并在 Webstorm 中创建了一个新的 Angular CLI 项目,该项目正确检测到了 jasmine 类型。
我发现我的项目中的 tsconfig.json
和 tsconfig.spec.json
文件定义了 typeRoots
和 types
,而另一个项目没有。
https://i.stack.imgur.com/wyLwK.png
typeRoots
选项的行为是:
如果指定了 typeRoots,则仅包含 typeRoots 下的包。
Types
的行为方式类似。
打字稿文档继续说:
默认情况下,所有可见的“@types”包都包含在您的编译中。任何封闭文件夹的 node_modules/@types 中的包都被认为是可见的。
所以,对于我的项目,这种行为对我来说已经足够好了。从我的 tsconfig.json
和 tsconfig.spec.json
文件中删除 typeRoots
和 types
立即解决了这个问题。
是的,茉莉花是在 tsconfig.spec.json
中的 types
下声明的。是的,它被设置为扩展 tsconfig.json
。
在这种情况下,没关系。有一天,它刚刚停止工作。可能是由于 Typescript 升级,但我不能肯定。如果有人知道为什么,请在下面发表评论,我很好奇。