Как я могу получить доступ к метаданным в rspec before (: all)?
Я хотел бы иметь возможность отображать имя тестовой группы (и родословную) во время метода before (: all):
describe "My awesome app" do
before(:all) do
puts running_example_group.metadata[:full_description] # <- what I'm imagining
...
done
...
describe "awesome widget" do
before (:all) do
puts running_example_group.metadata[:full_description] # <- what I'm imagining
...
done
...
done
done
Идея заключается в том, что вывести результат:
My awesome app
My awesome app awesome widget
Эти данные доступны внутри предложений "it", но я не могу понять это раньше (: все). Разве это недоступно? Я просто ошибаюсь?
Ответы
Ответ 1
Внутри блока before(:all)
нет "запускаемого примера", но вы можете получить доступ к метаданным через RSpec::Core::ExampleGroup
. Вот пример того, как вы можете получить доступ к метаданным из разных областей:
describe "My app", js: true do
context "with js set to #{metadata[:js]}" do
before :all do
puts "in before block: js is set to #{self.class.metadata[:js]}"
end
it "works" do
puts "in example: js is set to #{example.metadata[:js]}"
end
end
end
Для получения дополнительной информации, пожалуйста, взгляните на этот комментарий в rspec/rspec-core # 42.
Ответ 2
Это не совсем ответ на первоначальный вопрос, но это связано, и это был первый пост, связанный с моим поиском в Google, поэтому я хотел бы поделиться тем, что я только что выяснил.
В моем случае я искал способ запуска некоторых команд в before(:suite)
/before(:all)
, но только в том случае, если выполняемые тесты включали в себя некоторые системные тесты (или примеры с определенными метаданными). Вот что я придумала:
RSpec.configure do |config|
config.before(:suite) do
examples = RSpec.world.filtered_examples.values.flatten
has_system_tests = examples.any? { |example| example.metadata[:type] == :system }
if has_system_tests
...
end
end
end