RSpec-메타 데이터

RSpec은 유연하고 강력한 도구입니다. RSpec의 메타 데이터 기능도 예외는 아닙니다. 메타 데이터는 일반적으로 "데이터에 대한 데이터"를 의미합니다. RSpec에서 이것은 귀하의describe, contextit blocks.

예를 살펴 보겠습니다.

RSpec.describe "An Example Group with a metadata variable", :foo => 17 do 
   context 'and a context with another variable', :bar => 12 do 
      
      it 'can access the metadata variable of the outer Example Group' do |example| 
         expect(example.metadata[:foo]).to eq(17) 
      end
      
      it 'can access the metadata variable in the context block' do |example|  
         expect(example.metadata[:bar]).to eq(12) 
      end 
      
   end 
end

위의 코드를 실행하면 다음 출력이 표시됩니다.

.. 
Finished in 0.002 seconds (files took 0.11301 seconds to load) 
2 examples, 0 failures

메타 데이터는 RSpec 파일 내의 다양한 범위에서 변수를 할당하는 방법을 제공합니다. example.metadata 변수는 예제 및 예제 그룹에 대한 기타 정보를 포함하는 Ruby 해시입니다.

예를 들어, 위의 코드를 다음과 같이 다시 작성해 보겠습니다.

RSpec.describe "An Example Group with a metadata variable", :foo => 17 do
   context 'and a context with another variable', :bar => 12 do 
      
      it 'can access the metadata variable in the context block' do |example|
         expect(example.metadata[:foo]).to eq(17) 
         expect(example.metadata[:bar]).to eq(12) 
         example.metadata.each do |k,v|
         puts "#{k}: #{v}"
      end
		
   end 
end

이 코드를 실행하면 example.metadata 해시의 모든 값을 볼 수 있습니다.

.execution_result: #<RSpec::Core::Example::ExecutionResult:0x00000002befd50>
block: #<Proc:0x00000002bf81a8@C:/rspec_tutorial/spec/metadata_spec.rb:7>
description_args: ["can access the metadata variable in the context block"]
description: can access the metadata variable in the context block
full_description: An Example Group with a metadata variable and a context 
   with another variable can access the metadata variable in the context block
described_class:
file_path: ./metadata_spec.rb
line_number: 7
location: ./metadata_spec.rb:7
absolute_file_path: C:/rspec_tutorial/spec/metadata_spec.rb
rerun_file_path: ./metadata_spec.rb
scoped_id: 1:1:2
foo: 17
bar: 12
example_group:
{:execution_result=>#<RSpec::Core::Example::ExecutionResult:
   0x00000002bfa0e8>, :block=>#<
   Proc:0x00000002bfac00@C:/rspec_tutorial/spec/metadata_spec.rb:2>, 
   :description_args=>["and a context with another variable"], 
	
   :description=>"and a context with another variable", 
   :full_description=>"An Example Group with a metadata variable
   and a context with another variable", :described_class=>nil, 
      :file_path=>"./metadata_spec.rb", 
		
   :line_number=>2, :location=>"./metadata_spec.rb:2", 
      :absolute_file_path=>"C:/rspec_tutorial/spec/metadata_spec.rb",
      :rerun_file_path=>"./metadata_spec.rb", 
		
   :scoped_id=>"1:1", :foo=>17, :parent_example_group=>
      {:execution_result=>#<
      RSpec::Core::Example::ExecutionResult:0x00000002c1f690>, 
      :block=>#<Proc:0x00000002baff70@C:/rspec_tutorial/spec/metadata_spec.rb:1>
      , :description_args=>["An Example Group with a metadata variable"], 
		
   :description=>"An Example Group with a metadata variable", 
   :full_description=>"An Example Group with a metadata variable", 
	:described_class=>nil, :file_path=>"./metadata_spec.rb", 
   :line_number=>1, :location=>"./metadata_spec.rb:1",
   :absolute_file_path=>
	
   "C:/rspec_tutorial/spec/metadata_spec.rb", 
   :rerun_file_path=>"./metadata_spec.rb", 
   :scoped_id=>"1", :foo=>17}, 
   :bar=>12}shared_group_inclusion_backtrace: [] 
	
last_run_status: unknown .
.
Finished in 0.004 seconds (files took 0.11101 seconds to load) 
2 examples, 0 failures

대부분의 경우이 메타 데이터를 모두 사용할 필요는 없지만 전체 설명 값을 살펴보십시오.

메타 데이터 변수가있는 예제 그룹과 다른 변수가있는 컨텍스트는 컨텍스트 블록의 메타 데이터 변수에 액세스 할 수 있습니다.

이것은 설명 블록 설명 + 포함 된 컨텍스트 블록 설명 + 설명에 대한 설명으로 작성된 문장입니다. it block.

여기서 흥미로운 점은이 세 문자열이 함께 일반 영어 문장처럼 읽혀진다는 것입니다. . . 이것은 RSpec의이면에있는 아이디어 중 하나입니다. 행동에 대한 영어 설명처럼 들리는 테스트가 있습니다.