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/**/*"
。
我有一个遗留项目,它使用了很多 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/**/*"
。