Ruby 如何在rspec中使用不同的before钩子运行相同的规范
我维护一个从各种API收集数据的gem。对于需要API密钥的API,我已经实现了在未设置API密钥时可以依赖的刮刀 我目前测试scraper和API代码的解决方案是拥有两个几乎相同的spec文件,除了一个before钩子 在API规范中,我有一个Ruby 如何在rspec中使用不同的before钩子运行相同的规范,ruby,unit-testing,rspec,automated-tests,Ruby,Unit Testing,Rspec,Automated Tests,我维护一个从各种API收集数据的gem。对于需要API密钥的API,我已经实现了在未设置API密钥时可以依赖的刮刀 我目前测试scraper和API代码的解决方案是拥有两个几乎相同的spec文件,除了一个before钩子 在API规范中,我有一个before(:each)hook,它显式地设置API键 在scraper规范中,我在(:each)之前有一个钩子,它显式地使API键无效 除了这两个不同的挂钩,规格基本相同。然而,有一两个API规范不同于scraper规范的实例,所以我需要处理这个问题
before(:each)
hook,它显式地设置API键
在scraper规范中,我在(:each)之前有一个钩子,它显式地使API键无效
除了这两个不同的挂钩,规格基本相同。然而,有一两个API规范不同于scraper规范的实例,所以我需要处理这个问题的能力。我想只要检查API键是否设置就足够了
另一件需要注意的事情是,我不想重新运行我的整个测试套件,因为代码库中只有一小部分同时具有API和scraper。我基本上需要能够设置在每个规格的基础上
提前感谢你们提供的任何帮助
编辑:我想我有一个解决方案。将提供详细信息时,我得到一个完整的实施 这就是RSpec的目的。像这样使用:
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
啊。这比我尝试的方式要优雅得多,我尝试的方式是将规范包装在一个
[nil,'api key]中,每个do | api|u key
块中。我最终会像这样重新格式化它。非常感谢。