Rspec-core: 보λ₯˜ 쀑인 곡유 예

에 λ§Œλ“  2014λ…„ 06μ›” 05일  Β·  6μ½”λ©˜νŠΈ  Β·  좜처: rspec/rspec-core

λ‚˜λŠ” λͺ¨λ‘ 일련의 λ©”μ„œλ“œλ₯Ό κ΅¬ν˜„ν•˜λŠ” 였리 μœ ν˜• 클래슀 λͺ¨μŒμ„ 가지고 μžˆμŠ΅λ‹ˆλ‹€.
λ‚˜λŠ” μ΄λŸ¬ν•œ 방법을 μ„€λͺ…ν•˜λŠ” 곡유 예제 그룹을 λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

shared_examples_for "a duck type" do
  it { should respond_to(:method1) }
end
describe Class1 do
  it_should_behave_like "a duck type"
end
describe Class2 do
  it_should_behave_like "a duck type"
end

제 μƒν™©μ—μ„œλŠ” Class1#method1 κ΅¬ν˜„ν–ˆμ§€λ§Œ Class2#method1 κ°€ 보λ₯˜ μ€‘μž…λ‹ˆλ‹€.

μ €λŠ” λ‹€μŒκ³Ό 같이 말할 수 μžˆλŠ” λŠ₯λ ₯을 μ›ν•©λ‹ˆλ‹€.

describe Class2 do
    it_should_behave_like "a duck type", :pending
end

pending λ₯Ό 곡유 μ˜ˆμ œμ— μ μš©ν•  수 μžˆμ§€λ§Œ it_should_behave_like μ—λŠ” μ μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€. 이것은 일뢀 클래슀 κ΅¬ν˜„μ΄ μ™„λ£Œλ˜κ³  λ‹€λ₯Έ 클래슀 κ΅¬ν˜„μ΄ 보λ₯˜ 쀑인 였리 μœ ν˜• λͺ¨μŒμœΌλ‘œ μž‘μ—…ν•  λ•Œ μ°¨μ„ μ±…μž…λ‹ˆλ‹€.

κ°œμ„  μš”μ²­:
1) it_should_behave_like λŒ€ν•΄ :pending 속성을 ν™œμ„±ν™”ν•©λ‹ˆλ‹€.
2) it_should_behave_like λŒ€ν•΄ :skip 속성을 ν™œμ„±ν™”ν•©λ‹ˆλ‹€.
3) xit_should_behave_like

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

λ‹€λ₯Έ μ‚¬λžŒμ΄ Google을 톡해 이 문제λ₯Ό λ°œκ²¬ν•˜λ©΄ λ‹€μŒκ³Ό 같이 호좜 μ‚¬μ΄νŠΈμ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” 또 λ‹€λ₯Έ 트릭이 μžˆμŠ΅λ‹ˆλ‹€. 메타데이터 λ˜λŠ” ν”Œλž˜κ·Έ 인수λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄ 곡유 예제 μ •μ˜λ₯Ό μˆ˜μ •ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.

it_behaves_like 'some shared example' do
  before { pending }
end

λͺ¨λ“  6 λŒ“κΈ€

it_should_behave_like μ „λ‹¬λœ μΈμˆ˜λŠ” λ‹€λ₯Έ λͺ©μ μ„ 가지고 μžˆμŠ΅λ‹ˆλ‹€. 곡유된 예제 κ·Έλ£Ή 블둝에 μ–‘λ³΄λ©λ‹ˆλ‹€.

https://relishapp.com/rspec/rspec-core/v/3-0/docs/example-groups/shared-examples#passing -parameters-to-a-shared-example-group

인수λ₯Ό λ©”νƒ€λ°μ΄ν„°λ‘œ μ·¨κΈ‰ν•˜λŠ” 것도 ν˜Όλž€μŠ€λŸ¬μšΈ κ²ƒμž…λ‹ˆλ‹€. ν•˜μ§€λ§Œ μ›ν•˜λŠ” λ™μž‘μ„ 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.

shared_examples_for "a duck type" do |*metadata|
  context "describe this group", *metadata do
    # put the specs in here.
  end
end

λ˜λŠ” μΆ”κ°€ μ»¨ν…μŠ€νŠΈμ—μ„œ 사양을 λž˜ν•‘ν•˜μ§€ μ•ŠμœΌλ €λ©΄ before ν›„ν¬λ‘œ pending λ˜λŠ” skip λ₯Ό 지원할 수 μžˆμŠ΅λ‹ˆλ‹€.

shared_examples_for "a duck type" do |*flags|
  before { pending } if flags.include?(:pending)
  # specs go here
end

예, λŒ€λ‹¨νžˆ κ°μ‚¬ν•©λ‹ˆλ‹€. μ™„λ²½ν•˜κ²Œ μž‘λ™ν•  κ²ƒμž…λ‹ˆλ‹€.

λ‹€λ₯Έ μ‚¬λžŒμ΄ Google을 톡해 이 문제λ₯Ό λ°œκ²¬ν•˜λ©΄ λ‹€μŒκ³Ό 같이 호좜 μ‚¬μ΄νŠΈμ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” 또 λ‹€λ₯Έ 트릭이 μžˆμŠ΅λ‹ˆλ‹€. 메타데이터 λ˜λŠ” ν”Œλž˜κ·Έ 인수λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄ 곡유 예제 μ •μ˜λ₯Ό μˆ˜μ •ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.

it_behaves_like 'some shared example' do
  before { pending }
end

λ‚˜λŠ” λ¬Έμ œκ°€ λ‹€μ‹œ μ—΄λ €μ•Ό ν•˜κ³  λ‹€μŒ 쀑 ν•˜λ‚˜κ°€ μˆ˜ν–‰λ˜μ–΄μ•Ό ν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

  • 보λ₯˜ 쀑인 블둝을 λ‘˜λŸ¬μ‹Έμ„œ λͺ¨λ“  예제λ₯Ό 보λ₯˜ 쀑인 κ²ƒμœΌλ‘œ ν‘œμ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€.
pending('Reason for pending') do 
  it_behaves_like '...'
  context do 
     ...
  end
end

@andyl

μ‹œλ„ν•˜κ³  μ‹Άλ‹€λ©΄ λ¬Έμ„œλ₯Ό κ°œμ„ ν•˜κΈ° μœ„ν•΄ PR을 μˆ˜λ½ν•˜κ²Œ λ˜μ–΄ κΈ°μ©λ‹ˆλ‹€. ν•˜μ§€λ§Œ 이 λ™μž‘μ„ λ³€κ²½ν•˜κΈ° μœ„ν•΄ APIλ₯Ό ν™•μž₯ν•΄μ•Ό ν•œλ‹€κ³  μƒκ°ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰