我的规格中有很多行导致此IntelliJ警告:
"无法正确解决,未处理"
绝大多数线都有这种格式:
expect(result[:err]).to include('(Check the file permissions.)')
如果我将文字字符串移动到单独的变量,则警告消失:
msg = '(Check the file permissions.)'
expect(result[:err]).to include(msg)
有没有办法让这个错误消失(除了将我的所有字符串文字移动到变量之外)?
答案 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)
如果您愿意从使用单词include
到contain
之类的单词,则可以简单地创建一个自定义匹配器:
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.rb
或support/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