RubyMine 中的 Capybara 代码完成

Posted

技术标签:

【中文标题】RubyMine 中的 Capybara 代码完成【英文标题】:Capybara code completion in RubyMine 【发布时间】:2011-07-28 09:17:27 【问题描述】:

Cucumber 的步骤定义中使用 Capybara 时,有没有办法从 RubyMine 的代码完成中获得一些帮助?我是 Capybara 的新手,所以不必一直查看参考网站会很有帮助。

目前我能得到的最好的方法是显式调用Session.new,例如:

session = Capybara::Session.new(:rack_test, my_app)

session. 之后的这种方式 Ctrl+Space 向我展示了来自 Capybara::Session 的方法(仅限),所以至少我知道它可以通过某种方式到达。但这并不是我在步骤定义中真正使用 Capybara 的方式。我认为通过手动注释 page 来帮助类型推理引擎可以解决问题,但我想所有这些 DSL 魔法都难以处理。

所以基本上,有没有可能有

page.<Ctrl+Space>

弹出所有暴露的 DSL 方法? RubyMine API 也许吧?或者,作为替代方案,可以通过其他方式使参考文档更接近(我认为 RubyMine 还不支持 IDE 中的外部文档)?

【问题讨论】:

几乎不可能为 ruby​​ 等动态语言创建良好的代码补全。取而代之的是代码补全,您可以创建一组有用的代码模板。 大多数有用的 Capybara 方法都有短名称。为什么需要为他们完成代码? 您使用的是什么 ruby​​mine 版本。 Rubymine 6 改进了提示性文本。但是 luacassus 是对的,它不会是完美的。 在撰写本文时,我认为它可能是 3.0 版 - 现在不确定。我最近在 Ruby 方面做得不多,所以从那时起可能发生了很多变化。 【参考方案1】:

从 RubyMine 8.0.3 开始,答案是否定的,RubyMine 不会按照 Cucumber 步骤定义中的 page. 完成 Capybara 方法,至少当 Capybara 通过 cucumber-rails gem 包含在 Cucumber 中时不会。 I don't see a feature request in the RubyMine issue tracker;如果他们愿意,可以添加一个。

请注意,在 Cucumber 世界中,至少 cucumber-rails 包含 Capybara DSL,因此您无需在 Capybara 方法前键入 page.。您可以调用 visitfill_in 等作为 self 方法。为了完成 RubyMine,我不希望在我的步骤定义中出现不必要的 page.

不幸的是,当您在输入任何内容之前在步骤定义中调用完成时,RubyMine 也不在其完成的名称列表中包含 Capybara 方法。它确实在您调用完成两次时完成的名称列表中包含 Capybara 方法(所有可用代码中的所有名称),但由于该列表太长,只有在您已经知道您想要的方法时才有帮助,或者至少正确的前缀。

【讨论】:

【参考方案2】:

终于找到了解决办法。

我将 Cucumber 与 Capybara 一起使用,并且我在 /features/support/spec/spec_helper.rb 中包含了我想要完成编码的所有匹配器。 Cucumber 自动加载此文件中的所有内容。如果您不使用黄瓜,我敢打赌还有其他地方可以包含这些语句。

# Needed for RubyMine code completion
include Capybara::Node::DocumentMatchers
include Capybara::Node::Matchers
include Capybara::SessionMatchers
include Capybara::RSpecMatchers
include Capybara::RSpecMatcherProxies

针对您的具体情况: include Capybara::DSL

然后

【讨论】:

以上是关于RubyMine 中的 Capybara 代码完成的主要内容,如果未能解决你的问题,请参考以下文章

rubymine 2016 序列号

RubyMine中自动完成只输入部分字母

RubyMine 2019汉化版 JetBrains集成开发工具2019.3.1 MacOS

Capybara会议未在测试结束时结束

未读取 database.yml 中的 ENV 变量(Rails 4.2.0、RubyMine 7、Postgres、Ruby 2.2.0、DotEnv)

RubyMine:按键“转换为单引号”?