我维护一个从各种API收集数据的gem。对于需要API密钥的API,我已经实现了在没有设置API密钥时依赖的刮刀。
我当前测试刮刀和API代码的解决方案是有两个规格文件几乎相同,除了之前的钩子。
在API规范中,我有一个显式设置API密钥的before(:each)
挂钩。
在scraper规范中,我有一个before(:each)
挂钩,它明确地使API密钥无效。
除了这两个不同的钩子,规格基本相同。但是,有一个或两个实例,API规范与刮刀规范不同,所以我需要能够处理它。我想只是检查是否设置了API密钥就足够了。
另外需要注意的是,我不想重新运行我的整个测试套件,因为只有很小一部分代码库都有API和刮刀。我基本上需要能够按照规格进行设置。
提前感谢您提供的任何帮助!
编辑:想想我有一个解决方案。我将在完整实施时提供详细信息。
答案 0 :(得分:3)
这是RSpec的shared examples所针对的。像这样使用:
RSpec.shared_examples_for "an API component" do
let(:api_client) { APIClient.new }
it "foos" do
expect(api_client).to foo
end
it "bars" do
expect(api_client).to bar
end
end
RSpec.describe API do
it_behaves_like "an API component" do
before(:each) { set_api_key }
end
end
RSpec.describe Scraper do
it_behaves_like "an API component" do
before(:each) { nullify_api_key }
end
end