RSpec 使用 LSP 可导航 it_behaves_like/shared_examples

RSpec navigatable it_behaves_like/shared_examples using LSP

我有一个遗留项目,它使用了很多 shared_examples 功能,在实际规范和 shared_examples 实施之间导航非常不方便。

目前,唯一的方法是使用“some example”示例名称在项目中进行全局搜索。

RSpec.shared_examples "some example" do |parameter|
  let(:something) { parameter }

  it "uses the given parameter" do
    expect(something).to eq(parameter)
  end
end

RSpec.describe SomeClass do
  # "some example" has to become *something*
  # I can click and navigate to(jump-to-definition)
  include_examples "some example", "parameter1"
end

我想使用 LSP/Solargraph 进行这种导航。

也许有人以前这样做过并愿意分享他们是如何做到的?

结果比我预期的要简单。

只需将您的示例名称提取为字符串常量并将其放在 RSpec.shared_examples 实现旁边的某个位置。

# spec/support/shared_examples.rb
# in case you prefer one-liner use:
# RSpec.shared_examples(A_COLLECTION = 'a collection') do
# otherwise:

A_COLLECTION = 'a collection'
RSpec.shared_examples A_COLLECTION do
  let(:collection) { described_class.new([7, 2, 4]) }

  context 'initialized with 3 items' do
    it 'says it has three items' do
      expect(collection.size).to eq(3)
    end
  end
end
# spec/array_spec.rb
RSpec.describe Array do
  it_behaves_like A_COLLECTION
end

提示:如果它对您不起作用,请检查 .solargraph.yml 配置,默认情况下从索引中排除 "spec/**/*"