RSpec-메타 데이터
RSpec은 유연하고 강력한 도구입니다. RSpec의 메타 데이터 기능도 예외는 아닙니다. 메타 데이터는 일반적으로 "데이터에 대한 데이터"를 의미합니다. RSpec에서 이것은 귀하의describe, context 과 it 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의이면에있는 아이디어 중 하나입니다. 행동에 대한 영어 설명처럼 들리는 테스트가 있습니다.