IntelliJ Ruby警告"无法正确解决,未处理"

时间:2017-09-21 14:27:17

标签: ruby intellij-idea rspec warnings

我的规格中有很多行导致此IntelliJ警告:

"无法正确解决,未处理"

绝大多数线都有这种格式:

expect(result[:err]).to include('(Check the file permissions.)')

如果我将文字字符串移动到单独的变量,则警告消失:

    msg = '(Check the file permissions.)'
    expect(result[:err]).to include(msg)

有没有办法让这个错误消失(除了将我的所有字符串文字移动到变量之外)?

3 个答案:

答案 0 :(得分:0)

我的猜测是RubyMine解析器认为include是包含模块的Ruby关键字,所以它会发出警告,告诉它找不到相应的模块。

我发现修复此警告的唯一方法是使用rspec include matcher提出的inclusion别名:

expect(result[:err]).to inclusion('(Check the file permissions.)')

这修正了警告,期望也一样,但遗憾的是英语句子很糟糕。

还有其他3个别名可用,但它们没有提供更好的英语语法:

alias_matcher :a_collection_including, :include
alias_matcher :a_string_including,     :include
alias_matcher :a_hash_including,       :include
alias_matcher :including,              :include

可以找到这些别名定义here

这个答案很可能会导致某人找到更好的解决方案。

答案 1 :(得分:0)

如果您愿意从使用单词includecontain之类的单词,则可以简单地创建一个自定义匹配器:

RSpec::Matchers.define :contain do |expected|
  match do |actual|
    expect(actual).to include(expected)
  end
end

您可以将该代码直接添加到rails_helper.rb文件中,或者最好将其添加到单独的文件中。例如,创建spec/support/custom_matchers.rb并将代码放在此处。您需要确保在运行rspec时包含该文件。为此,您可以取消注释默认spec/rails_helper.rb文件中出现的以下行:

# Dir[Rails.root.join('spec', 'support', '**', '*.rb')].each { |f| require f }

安装该文件后,您的规格文件将显示为:

expect(result[:err]).to contain('(Check the file permissions.)')

答案 2 :(得分:0)

可以通过将其添加到rails_helper.rbsupport/rubymine_stubs.rb来解决:

# Rubymine IDE underlines `include` matchers with warning "Cannot resolve properly, was not processed"
# To fix this issue let's make an alias `contain` and use it instead
RSpec::Matchers.alias_matcher :contain, :include

module RubymineStubs
  # create stub for `contain` so Rubymine won't underline it
  def contain(*_args) end
end