Rspec-core: λ‹€λ₯Έ ν•„ν„°λ₯Ό μ‚¬μš©ν•˜μ—¬ λ™μΌν•œ 사양을 μ—¬λŸ¬ 번 μ‹€ν–‰

에 λ§Œλ“  2011λ…„ 10μ›” 08일  Β·  3μ½”λ©˜νŠΈ  Β·  좜처: rspec/rspec-core

_λ©΄μ±… μ‘°ν•­: 이 μš”μ²­μ€ 특히 Capybara둜 JavaScript 승인 ν…ŒμŠ€νŠΈλ₯Ό μˆ˜ν–‰ν•œ κ²°κ³Όμž…λ‹ˆλ‹€. λ‹€λ₯Έ 상황에 λŒ€ν•œ μ‚¬μš© 사둀λ₯Ό λ³Ό 수 μžˆμ§€λ§Œ._

λ‚΄ λͺ¨λ“  μ‘μš© ν”„λ‘œκ·Έλž¨μ€ JSκ°€ 꺼진 μƒνƒœμ—μ„œλ„ 잘 μž‘λ™ν•˜λ„λ‘ μ½”λ”©λ˜μ–΄ μžˆμ§€λ§Œ JSλ₯Ό 켜면 _μΌœμ§„__ μ‚¬μš©μž κ²½ν—˜μ„ 더 즐겁게 λ§Œλ“€κΈ° μœ„ν•΄ 멋진 μ’…μ†Œλ¦¬μ™€ νœ˜νŒŒλžŒμ„ 많이 얻을 수 μžˆμŠ΅λ‹ˆλ‹€. 이 λ•Œλ¬Έμ— μ‚¬μš©μžμ˜ κ΄€μ μ—μ„œ 보면 λŒ€λΆ€λΆ„μ˜ 사물에 λŒ€ν•œ μƒν˜Έ μž‘μš©μ€ λ™μΌν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ JS와 w/o λͺ¨λ‘μ—μ„œ μž‘λ™ν•˜λŠ”μ§€ ν…ŒμŠ€νŠΈν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

λ‚΄κ°€ μ›ν•˜λŠ” 것은 RSpec이 각 ν•„ν„° μ„ΈνŠΈλ₯Ό μ‚¬μš©ν•˜μ—¬ λ™μΌν•œ 사양을 두 번 μ‹€ν–‰ν•˜λ„λ‘ μ§€μ‹œν•˜λŠ” μΌμ’…μ˜ ν”Œλž˜κ·Έλ₯Ό μ„€μ •ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. λ‹€μŒκ³Ό 같은 것:

it 'does this same thing with and without JS enabled', :run_with => [{:js => true}, {:js => false}] do
    # stuff here
end

λ‚˜λŠ” 이것이 곡유 예제둜 달성될 수 μžˆλ‹€λŠ” 것을 μ•Œκ³  μžˆμ§€λ§Œ κ²°κ³Ό μ½”λ“œλŠ” 그닀지 μš°μ•„ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λ‹€μŒκ³Ό 같이 Firefox(Selenium)μ—μ„œ JS 및 Webkit(capybara-webkit)μ—μ„œ JS 없이 JS(λž™ ν…ŒμŠ€νŠΈ)λ₯Ό ν…ŒμŠ€νŠΈν•˜λ €λŠ” 경우 μΆ”κ°€λ‘œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

it 'does this same thing with and without JS enabled', :run_with => [{:js => false}, {:driver => :selenium}, {:driver => :webkit}] do
    # stuff here
end

λ˜ν•œ μ‚¬μš©μž 지정 ν•„ν„°λ₯Ό μ‚¬μš©ν•˜μ—¬ run_with μ˜΅μ…˜μ„ μ§€μ •ν•˜λŠ” 방법을 ꡬ상 μ€‘μ΄λ―€λ‘œ λ‹€μŒκ³Ό 같이 μž₯ν™©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

it 'does this same thing with and without JS enabled', :run_with_all_drivers => true do
    # stuff here
end

생각? λ¬Έμ„œμ™€ μ½”λ“œλ₯Ό μ‚΄νŽ΄λ³΄μ•˜μ§€λ§Œ ν˜„μž¬ ν•„ν„°λ₯Ό μ‚¬μš©ν•˜μ—¬ 이 μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 방법을 보지 λͺ»ν–ˆμŠ΅λ‹ˆλ‹€.

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

ν•„ν„°λŠ” 기본적으둜 이 μž‘μ—…μ„ μˆ˜ν–‰ν•˜λ„λ‘ μ„€κ³„λ˜μ§€ μ•Šμ•˜μ§€λ§Œ RSpec을 λ³€κ²½ν•˜μ§€ μ•Šκ³  μ›ν•˜λŠ” λ™μž‘μ„ μ–»λŠ” 것은 어렡지 μ•ŠμŠ΅λ‹ˆλ‹€.

[true, false].each do |js|
  it 'does this same thing with and without JS enabled', :run_with => {:js => js } do
    # stuff here
  end
end

이것이 ν•„μš”ν•œ 일반적인 νŒ¨ν„΄μΈ 경우 이에 λŒ€ν•œ μ•½κ°„μ˜ DSL 방법을 λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

module WithAndWithoutJS
  def with_and_without_js(&block)
    [true, false].each do |js|
      context "with :js => #{js}", :run_with => { :js => js } do
        module_eval(&block)
      end
    end
  end

  RSpec.configure { |c| c.extend self }
end

그런 λ‹€μŒ 이 방법을 λ‹€μŒκ³Ό 같이 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

describe "My integration spec" do
  with_and_without_js do
    it "does something with and without js" do
    end
  end
end

λ‚˜λŠ” 이것이 μƒλ‹Ήνžˆ μš°μ•„ν•œ 것이라고 μƒκ°ν•œλ‹€. κ·€ν•˜κ°€ μš”μ²­ν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄ ν•„ν„°κ°€ μž‘λ™ν•˜λŠ” 방식을 λ³€κ²½ν•˜λŠ” 것은 거의 μ‚¬μš©λ˜μ§€ μ•Šμ„ κ²ƒμœΌλ‘œ μ˜ˆμƒλ˜λŠ” κΈ°λŠ₯에 λŒ€ν•œ ν–₯ν›„ μœ μ§€ 관리 뢀담을 RSpec νŒ€μ— μΆ”κ°€ν•˜λŠ” μƒλ‹Ήνžˆ μ€‘μš”ν•œ 변경이 될 κ²ƒμ΄λ―€λ‘œ λ‚΄ λ³ΈλŠ₯은 이것을 코어에 μΆ”κ°€ν•˜μ§€ μ•ŠλŠ” κ²ƒμž…λ‹ˆλ‹€. .

즉, 이 κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” rspec-multi-filters gem을 λ§Œλ“€κ³  μ‹Άλ‹€λ©΄ 자유둭게 μ‚¬μš©ν•˜μ„Έμš” :).

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

ν•„ν„°λŠ” 기본적으둜 이 μž‘μ—…μ„ μˆ˜ν–‰ν•˜λ„λ‘ μ„€κ³„λ˜μ§€ μ•Šμ•˜μ§€λ§Œ RSpec을 λ³€κ²½ν•˜μ§€ μ•Šκ³  μ›ν•˜λŠ” λ™μž‘μ„ μ–»λŠ” 것은 어렡지 μ•ŠμŠ΅λ‹ˆλ‹€.

[true, false].each do |js|
  it 'does this same thing with and without JS enabled', :run_with => {:js => js } do
    # stuff here
  end
end

이것이 ν•„μš”ν•œ 일반적인 νŒ¨ν„΄μΈ 경우 이에 λŒ€ν•œ μ•½κ°„μ˜ DSL 방법을 λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

module WithAndWithoutJS
  def with_and_without_js(&block)
    [true, false].each do |js|
      context "with :js => #{js}", :run_with => { :js => js } do
        module_eval(&block)
      end
    end
  end

  RSpec.configure { |c| c.extend self }
end

그런 λ‹€μŒ 이 방법을 λ‹€μŒκ³Ό 같이 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

describe "My integration spec" do
  with_and_without_js do
    it "does something with and without js" do
    end
  end
end

λ‚˜λŠ” 이것이 μƒλ‹Ήνžˆ μš°μ•„ν•œ 것이라고 μƒκ°ν•œλ‹€. κ·€ν•˜κ°€ μš”μ²­ν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄ ν•„ν„°κ°€ μž‘λ™ν•˜λŠ” 방식을 λ³€κ²½ν•˜λŠ” 것은 거의 μ‚¬μš©λ˜μ§€ μ•Šμ„ κ²ƒμœΌλ‘œ μ˜ˆμƒλ˜λŠ” κΈ°λŠ₯에 λŒ€ν•œ ν–₯ν›„ μœ μ§€ 관리 뢀담을 RSpec νŒ€μ— μΆ”κ°€ν•˜λŠ” μƒλ‹Ήνžˆ μ€‘μš”ν•œ 변경이 될 κ²ƒμ΄λ―€λ‘œ λ‚΄ λ³ΈλŠ₯은 이것을 코어에 μΆ”κ°€ν•˜μ§€ μ•ŠλŠ” κ²ƒμž…λ‹ˆλ‹€. .

즉, 이 κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” rspec-multi-filters gem을 λ§Œλ“€κ³  μ‹Άλ‹€λ©΄ 자유둭게 μ‚¬μš©ν•˜μ„Έμš” :).

@myronmarston ν‰μ†Œμ™€ 같이 RSpec이 무엇을 ν•  수 μžˆλŠ”μ§€μ— λŒ€ν•œ λ¬΄μ§€μ˜€μŠ΅λ‹ˆλ‹€. μ‹œκ°„μ„ λ‚΄μ–΄ μ„€λͺ…ν•΄μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. λ‚˜λŠ” 이것이 잘 μž‘λ™ν•  것이라고 μƒκ°ν•œλ‹€. :)

:+1: ꡉμž₯ν•˜λ‹€

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