Cucumber-js: 단계 μ •μ˜μ—μ„œ 단계 호좜

에 λ§Œλ“  2011λ…„ 06μ›” 01일  Β·  31μ½”λ©˜νŠΈ  Β·  좜처: cucumber/cucumber-js

단계 μ •μ˜μ—μ„œ 단계 ν˜ΈμΆœμ„ ν—ˆμš©ν•©λ‹ˆλ‹€.

https://github.com/cucumber/cucumber/wiki/Calling-Steps-from-Step-Definitions

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

:-1: :-1: :-1: :-1: :-1:

stepdefμ—μ„œ 단계λ₯Ό ν˜ΈμΆœν•˜λŠ” 것은 Cucumber(-Ruby)에 μΆ”κ°€ν•˜μ§€ μ•Šμ•˜μœΌλ©΄ ν•˜λŠ” κΈ°λŠ₯ 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€. Ruby stepdefλŠ” λ‹€λ₯Έ κ³³μ—μ„œ ν˜ΈμΆœν•  수 μ—†λŠ” 읡λͺ… ν΄λ‘œμ €λ₯Ό μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€(ν›„ν”„λ₯Ό κ±°μΉ˜μ§€ μ•ŠλŠ” ν•œ).

JavaScriptμ—μ„œλŠ” 상황이 λ‹€λ¦…λ‹ˆλ‹€. 단계 μ •μ˜λŠ” 일급 κΈ°λŠ₯을 μ‚¬μš©ν•©λ‹ˆλ‹€!

function x_is_something(x, cb) {
  console.log('x', x);
  cb();
}

Given(/x is (.*)/, x_is_something);

Given(/super x/, function(cb) {
  x_is_something(97, cb);
});

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

이것이 κ΅¬ν˜„λ˜λ©΄ 였이-rbμ—μ„œ 이 μž‘μ—…μ„ μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄ #steps μ΄μ™Έμ˜ λͺ¨λ“  것을 더 이상 μ‚¬μš©ν•˜μ§€ μ•Šμ„ κ³„νšμž„μ„ λͺ…μ‹¬ν•˜μ‹­μ‹œμ˜€. https://github.com/cucumber/cucumber/issues/68 μ°Έμ‘°

λ§· κ°μ‚¬ν•©λ‹ˆλ‹€. -jsλŠ” steps()만 μ§€μ›ν•©λ‹ˆλ‹€.

μ’‹μ•„μš”!

이에 λŒ€ν•œ 진전이 μžˆμŠ΅λ‹ˆκΉŒ? μƒλ‹Ήνžˆ μ€‘μš”ν•œ κΈ°λŠ₯인 것 κ°™μŠ΅λ‹ˆλ‹€.

이것은 ν˜„μž¬ λ§ˆμΌμŠ€ν†€(0.3)의 μΌλΆ€λ‘œ κ³„νšλ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. 0.4의 일뢀여야 _ν•΄μ•Ό ν•©λ‹ˆλ‹€_.

@mattwynne step() 도 μ§€μ›ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. λ‚˜ λ§žμ•„?

@jbpros μΆ”μΈ‘ν•©λ‹ˆλ‹€. #step 둜 μ‹œμž‘ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. Gherkin을 ꡬ문 λΆ„μ„ν•˜λŠ” λŒ€μ‹  단계λ₯Ό ν˜ΈμΆœν•˜κΈ° λ•Œλ¬Έμ— κ΅¬ν˜„μ΄ 더 κ°„λ‹¨ν•©λ‹ˆλ‹€.

λ‚˜λŠ” 개인적으둜 이 κΈ°λŠ₯ 없이 Cucumberλ₯Ό μ‚¬μš©ν•˜λŠ” 것을 기쁘게 μƒκ°ν•©λ‹ˆλ‹€. λ‚˜λŠ” 그것을 μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©° 그것을 λ‚˜μœ μŠ΅κ΄€μ΄λΌκ³  μƒκ°ν•©λ‹ˆλ‹€. λ‚˜λŠ” 항상 λŒ€μ‹  λ©”μ†Œλ“œμ— μœ„μž„ν•˜λŠ” 것을 μ„ ν˜Έν•©λ‹ˆλ‹€.

ꢁ극적으둜 μš°λ¦¬κ°€ 이것을 μ§€μ›ν•˜λ €λ©΄ Gherkinμ—μ„œ κ΅¬ν˜„λ˜λŠ” 것을 보고 μ‹ΆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ λ‹€λ₯Έ μ—¬λŸ¬ ν•˜μœ„ μˆ˜μ€€ 단계에 λ§€ν•‘λ˜λŠ” 맀크둜 단계λ₯Ό μ •μ˜ν•˜λŠ” 방법이 μžˆμŠ΅λ‹ˆλ‹€. 그런 λ‹€μŒ CucumberλŠ” ν•˜μœ„ μˆ˜μ€€μ„ ν˜ΈμΆœν•˜λΌλŠ” μ§€μ‹œλ₯Ό λ°›κ³  진행 쀑인 맀핑이 μžˆλŠ”μ§€ 거의 μ•Œ ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€. 그게 λ‚΄ μ·¨ν–₯일 것이닀.

TL;DR: Cucumber.js(및 -jvm, -ruby 2 λ“±)에 steps() / step() λ₯Ό μ •λ§λ‘œ μΆ”κ°€ν•΄μ•Ό ν•©λ‹ˆκΉŒ?

λ§·λ‹˜ 말씀에 μ „μ μœΌλ‘œ λ™μ˜ν•©λ‹ˆλ‹€. _λΆˆν–‰νžˆλ„_ 이것은 ν˜„μž¬ Cucumber.jsμ—μ„œ κ°€μž₯ μ›ν•˜λŠ” κΈ°λŠ₯μž…λ‹ˆλ‹€.

λ‚΄κ°€ μ΄ν•΄ν•˜λŠ” ν•œ λ§Žμ€ μ‚¬λžŒλ“€μ΄ 단계 μ •μ˜λ₯Ό _methods_ λ˜λŠ” _functions_으둜 κ°„μ£Όν•©λ‹ˆλ‹€. λ‚΄κ°€ λ³΄κΈ°μ—λŠ” μœ μ°½ν•œ μ–Έμ–΄ λ¬Έμž₯κ³Ό ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ μ½”λ“œ 쑰각 μ‚¬μ΄μ˜ 맀핑일 뿐 κ·Έ 이상은 μ•„λ‹™λ‹ˆλ‹€. 이것은 μš°λ¦¬κ°€ κ·Έ μ§μŠΉμ„ λŒ€ν•˜λŠ” 방법과 κΉŠμ€ 관련이 μžˆμŠ΅λ‹ˆλ‹€.

ν”„λ‘œκ·Έλž˜λ¨Έμ˜ κ΄€μ μ—μ„œ 보면 단계 μ •μ˜λŠ” λ©”μ„œλ“œμ²˜λŸΌ λ³΄μž…λ‹ˆλ‹€. λ‚˜λŠ” 그것이 μ˜€λŠ˜λ‚  Cucumber_s_의 약점이라고 λ³Έλ‹€. 단계 μ •μ˜λŠ” APIκ°€ μ•„λ‹ˆλΌ λͺ…μ‹œμ  λ²ˆμ—­ 맡, λ§ν•˜μžλ©΄ μ‚¬μ „μœΌλ‘œ λ…ΈμΆœλ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

@msassak 은 이미 이에 λŒ€ν•΄ ν₯미둜운 생각을 ν•˜κ³  μžˆμ—ˆκ³  Cucumber 2.0μ—μ„œ ν•΄λ‹Ή "맀핑"을 λ‹€μ‹œ λͺ¨λΈλ§ν•˜λŠ” μž‘μ—…μ„ ν›Œλ₯­ν•˜κ²Œ μˆ˜ν–‰ν–ˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

λ‚˜λŠ” μ§€κΈˆ λ°”λ‘œ Cucumber.jsμ—μ„œ 이 λ¬Έμ œμ— λŒ€ν•΄ μž‘μ—…ν•˜κΈ°λ₯Ό κΊΌλ¦½λ‹ˆλ‹€. λ°˜λ©΄μ— λ‚˜λŠ” λ‚΄ 개인적인 μ·¨ν–₯/의견 λ•Œλ¬Έμ— κΈ°λŠ₯ μœ μ§€λ₯Ό ν•˜κ³  싢지 μ•ŠμŠ΅λ‹ˆλ‹€.

:-1: :-1: :-1: :-1: :-1:

stepdefμ—μ„œ 단계λ₯Ό ν˜ΈμΆœν•˜λŠ” 것은 Cucumber(-Ruby)에 μΆ”κ°€ν•˜μ§€ μ•Šμ•˜μœΌλ©΄ ν•˜λŠ” κΈ°λŠ₯ 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€. Ruby stepdefλŠ” λ‹€λ₯Έ κ³³μ—μ„œ ν˜ΈμΆœν•  수 μ—†λŠ” 읡λͺ… ν΄λ‘œμ €λ₯Ό μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€(ν›„ν”„λ₯Ό κ±°μΉ˜μ§€ μ•ŠλŠ” ν•œ).

JavaScriptμ—μ„œλŠ” 상황이 λ‹€λ¦…λ‹ˆλ‹€. 단계 μ •μ˜λŠ” 일급 κΈ°λŠ₯을 μ‚¬μš©ν•©λ‹ˆλ‹€!

function x_is_something(x, cb) {
  console.log('x', x);
  cb();
}

Given(/x is (.*)/, x_is_something);

Given(/super x/, function(cb) {
  x_is_something(97, cb);
});

CLOSED (WONTFIX) : 망치:

μ—¬κΈ°μ—μ„œ κ°„λ‹¨ν•œ JS ν•¨μˆ˜ ν˜ΈμΆœλ³΄λ‹€ step() κ°€ 더 λ‚˜μ€ 방법을 μ΄ν•΄ν•˜κ³  μžˆλŠ”μ§€ 잘 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. κ°„μ ‘ 참쑰의 μΆ”κ°€ λ ˆμ΄μ–΄(즉, μ—¬μ „νžˆ JS ν•¨μˆ˜λ‘œ λ³€ν™˜λ˜μ–΄μ•Ό ν•˜λŠ” νŠΉμ • μ‚¬μš©μžμ—κ²Œ GET μš”μ²­μ„ ν•˜κΈ° μœ„ν•œ 단계 μ •μ˜)λ₯Ό μ‚¬μš©ν•˜μ—¬ μ–΄μ¨Œλ“  ν•˜κ²Œ λ˜λŠ” 것이 μ•„λ‹Œκ°€μš”?

λ‚˜λŠ” 당신이 _μ‹œλ‚˜λ¦¬μ˜€λ₯Ό λ°œλ™ν•  방법이 μ—†κΈ° λ•Œλ¬Έμ—_라고 μΌλ‹€λŠ” 것을 μ•Œμ•„μ°¨λ ΈμŠ΅λ‹ˆλ‹€. 단계 λ₯Ό μ˜λ―Έν–ˆμŠ΅λ‹ˆκΉŒ μ•„λ‹ˆλ©΄ μ˜λ„μ μœΌλ‘œ μ‹œλ‚˜λ¦¬μ˜€ μž…λ‹ˆκΉŒ(ν›„μžμ˜ κ²½μš°μ—λŠ” 당신이 무엇을 ν•˜λ €κ³  ν•˜λŠ”μ§€ μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€).

μ—¬μ „νžˆ λ°±κ·ΈλΌμš΄λ“œμ—μ„œ μ‚¬μš©μžλ₯Ό μ •μ˜ν•˜κ³  When λ‹¨κ³„μ—μ„œ λ°˜λ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Feature:
  Background:
    Given a valid user called Simon
    And a valid user called Sarah
    And a valid user called Johnny

  Scenario Outline:
    When each valid user sends a GET request to /search<query>
    Then everyone's request response code is 400
    And everyone's request response body starts with <body>

  Examples:
    | query  | body |
    | ?foo=1 | ...  |

그리고 λ„€, 이것은 μš”μ²­ 응닡을 배열에 μ €μž₯ν•˜κ³  λ°˜λ³΅ν•˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€. κ·Έλ ‡κ²Œ λ‚˜μœκ°€μš”?

일뢀 흐름(예: 체크아웃 흐름)이 있고 μ΅œμ’… 확인 νŽ˜μ΄μ§€λ‘œ μ΄λ™ν•˜λ €λŠ” 경우 단계 μ •μ˜μ— μ •μ˜λœ(μ–΄λ”˜κ°€) 단계λ₯Ό μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
μ–΄λ”˜κ°€μ— ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜κ³  단계 μ •μ˜μ—μ„œ ν˜ΈμΆœν•  μˆ˜λ„ μžˆλ‹€λŠ” 데 λ™μ˜ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λ‹¨κ³„μ—μ„œ κΈ°λŠ₯으둜 μ΄λ™ν•˜λŠ” λ…Έλ ₯을 μ΅œμ†Œν™”ν•©λ‹ˆλ‹€. BDD μ–΄λ”˜κ°€μ—μ„œ 흐름을 μ„€λͺ…ν•œ 경우 λ³„λ„μ˜ 라이브러리둜 μ΄λ™ν•˜λŠ” 데 μΆ”κ°€ μ‹œκ°„μ„ ν• μ• ν•  ν•„μš”κ°€ μ—†μœΌλ©° λ‹¨μˆœνžˆ 단계 μ •μ˜λ₯Ό ν˜ΈμΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€.

ν•œ 단계λ₯Ό ν˜ΈμΆœν•˜λŠ” 것은 거의 μ“Έλͺ¨κ°€ μ—†μŠ΅λ‹ˆλ‹€. μ—¬κΈ°μ—μ„œ λͺ¨λ“  λ£¨λΉ„μ˜ 단계 κΈ°λŠ₯을 이식할 μƒκ°μ΄μ—ˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λ‚΄ μš”μ²­μ΄ 마감되자 λ‚˜λŠ” 그것에 μ‹œκ°„μ„ ν• μ• ν•˜μ§€ μ•Šμ„ κ²ƒμž…λ‹ˆλ‹€.

감사 ν•΄μš”.

@cono κ°€ λ§ν–ˆλ“―μ΄ 이것은 μˆ˜μ •λ˜μ§€ μ•ŠλŠ”λ‹€λŠ” 것이 λ„ˆλ¬΄ μ•ˆνƒ€κΉμŠ΅λ‹ˆλ‹€. 단일 단계λ₯Ό ν˜ΈμΆœν•˜λŠ” 것은 거의 μ“Έλͺ¨κ°€ μ—†μœΌλ©° μ‹€μ œ μ‚¬λ‘€λŠ” 더 λ³΅μž‘ν•œ μž‘μ—…μž…λ‹ˆλ‹€.

이것은 λͺ‡ 가지 μ„ΈλΆ„ν™”λœ μ‹œλ‚˜λ¦¬μ˜€λ₯Ό λ§Œλ“  λ‹€μŒ 이 μž‘μ—…μ„ λ°˜λ³΅ν•˜λŠ” λ‹€λ₯Έ μ‹œλ‚˜λ¦¬μ˜€λ₯Ό λ§Œλ“œλŠ” 데 정말 μœ μš©ν•©λ‹ˆλ‹€. 특히 단계가 λ‘˜ μ΄μƒμ˜ νŒŒμΌμ— μ •μ˜λ˜μ–΄ μžˆλŠ” 경우 ν•¨μˆ˜ μž¬μ‚¬μš© λŒ€μ•ˆμ€ 쉽지도 κΉ¨λ—ν•˜μ§€λ„ μ•ŠμŠ΅λ‹ˆλ‹€.

ν•˜μ΄! λ‚˜λŠ” 당신이 μš”κ΅¬ν•˜λŠ” 것을 μ •ν™•νžˆ μˆ˜ν–‰ν•˜λŠ” 라이브러리λ₯Ό λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€(λ‹€λ₯Έ λ‹¨κ³„μ—μ„œ ν•œ 단계 호좜). μ—¬κΈ°λ₯Ό μ‚΄νŽ΄λ³΄μ‹­μ‹œμ˜€: https://github.com/hackhat/cucumberry
ν”Όλ“œλ°±μ„ ν™˜μ˜ν•©λ‹ˆλ‹€!

@hackhat 정말 λ©‹μ§€λ„€μš”. λ‚˜λŠ” 일반적으둜 단계 μ •μ˜μ˜ 동기화 뢀뢄을 μ’‹μ•„ν•©λ‹ˆλ‹€. 였이-ν”„λ‘œλŠ” 였이.js μ „μš© ν”ŒλŸ¬κ·ΈμΈμΈκ°€μš”?

@jlin412 μ „ν™”λŠ” 잘 λͺ¨λ₯΄κ² λŠ”데 였이 λ„μš°λ―Έ κ°™λ‹€. ν”Όλ“œλ°± κ°μ‚¬ν•©λ‹ˆλ‹€

@hackhat 동기화 단계λ₯Ό μƒμ„±ν•˜λ €λ©΄ λ‹€μŒ ꡬ문을 μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€. this.addStep(...)? protractor.js/webdriver.js λŒ€μ‹  μ…€λ ˆλŠ„ 동기화도 μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆκΉŒ?

@jlin412 동기화 ν”ŒλŸ¬κ·ΈμΈλ§Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ‚¬μš© 방법은 λ¬Έμ„œλ₯Ό μ°Έμ‘°ν•˜μ„Έμš”. μ œκ°€ λͺ¨λ°”일이라 μ •ν™•ν•œ 단계λ₯Ό μ•Œλ €λ“œλ¦΄ 수 μ—†μŠ΅λ‹ˆλ‹€. 당신이 기닀릴 수 μžˆλ‹€λ©΄ λ‚˜λŠ” 23h30 포λ₯΄νˆ¬κ°ˆ μ‹œκ°„ μ£Όμœ„μ— 더 잘 μ„€λͺ…ν•  κ²ƒμž…λ‹ˆλ‹€.

@hackhat ν”„λ‘œμ νŠΈ 이름을 λ‹€λ₯Έ μ΄λ¦„μœΌλ‘œ λ³€κ²½ν•˜μ„Έμš”. hackhat/cucumber-pro#1 μ°Έμ‘°

@aslakhellesoy https://github.com/hackhat/cucumberry 둜 이름 λ³€κ²½

@aslakhellesoy κ·Έλ ‡λ‹€λ©΄ 단계 ν˜ΈμΆœμ„ μ—°κ²°ν•˜λŠ” 방법은 λ¬΄μ—‡μž…λ‹ˆκΉŒ? νŒ”λ‘œμš°μ²˜λŸΌ?

function x_is_something(x, cb) {
  console.log('x', x);
  this.x = x;
  cb();
}
function y_is_something(y, cb) {
  console.log('y', y);
  this.y = y;
  cb();
}

Given(/super z/, function(cb) {
  x_is_something(97, cb);
  y_is_something(8, cb);
});

y_is_something x_is_something κ°€ μ½œλ°±μ„ ν˜ΈμΆœν–ˆκΈ° λ•Œλ¬Έμ— 잘 μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λ˜ν•œ 단계가 세계 μ»¨ν…μŠ€νŠΈμ— λ³€μˆ˜λ₯Ό μ €μž₯ν•˜λŠ” 경우 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•Œλ§ˆλ‹€ μ’…λ£Œλ˜λ―€λ‘œ λ‹€μŒκ³Ό 같이 바인딩해야 ν•©λ‹ˆλ‹€.

Given(/super z/, function(cb) {
  x_is_something.bind(this)(97, cb);
  y_is_something.bind(this)(8, cb);
});

λˆ„κ΅¬λ“ μ§€ μ΄λŸ¬ν•œ λ¬Έμ œμ— λŒ€ν•œ 해결책이 μžˆμŠ΅λ‹ˆκΉŒ?

비동기λ₯Ό μ‚¬μš©ν•˜κ³  병렬 κΈ°λŠ₯을 μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€. 이런 μ‹μœΌλ‘œ 당신은 μ „ν™”
두 ν•˜μœ„ 호좜이 λͺ¨λ‘ μ™„λ£Œλœ ν›„μ—λ§Œ 메인 cb.
바인딩에 κ΄€ν•΄μ„œλŠ” 이것을 bind와 ν•¨κ»˜ μ‚¬μš©ν•˜κ±°λ‚˜ ν΄λ‘œμ € λ³€μˆ˜λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

2015λ…„ 5μ›” 14일 λͺ©μš”일 00:15 Yun Jia [email protected] 이 λ‹€μŒκ³Ό 같이 μΌμŠ΅λ‹ˆλ‹€.

@aslakhellesoy https://github.com/aslakhellesoy 그런 λ‹€μŒ 체인 방법
μŠ€ν… 콜? νŒ”λ‘œμš°μ²˜λŸΌ?

ν•¨μˆ˜ x_is_something(x, cb) {
console.log('x', x);
this.x = x;
cb();
}ν•¨μˆ˜ y_is_something(y, cb) {
console.log('y', y);
this.y = y;
cb();
}

주어진(/수퍼 z/, ν•¨μˆ˜(cb) {
x_is_something(97, cb);
y_is_something(8, cb);
});

x_is_something이 ν˜ΈμΆœν–ˆκΈ° λ•Œλ¬Έμ— 잘 μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
y_is_something이 μž‘μ—…μ„ μ™„λ£Œν•˜κΈ° 전에 μ½œλ°±ν•©λ‹ˆλ‹€.

λ˜ν•œ 단계가 세계 μ»¨ν…μŠ€νŠΈμ—μ„œ λ³€μˆ˜λ₯Ό μ €μž₯ν•˜λ©΄ μ’…λ£Œλ©λ‹ˆλ‹€.
ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•Œλ§ˆλ‹€ λ‹€μŒκ³Ό 같이 바인딩해야 ν•©λ‹ˆλ‹€.

주어진(/수퍼 z/, ν•¨μˆ˜(cb) {
x_is_something.bind(이)(97, cb);
y_is_something.bind(this)(8, cb);
});

λˆ„κ΅¬λ“ μ§€ μ΄λŸ¬ν•œ λ¬Έμ œμ— λŒ€ν•œ 해결책이 μžˆμŠ΅λ‹ˆκΉŒ?

β€”
이 이메일에 직접 λ‹΅μž₯ν•˜κ±°λ‚˜ GitHubμ—μ„œ ν™•μΈν•˜μ„Έμš”.
https://github.com/cucumber/cucumber-js/issues/11#issuecomment -101845619
.

+1, 이것은 lib의 일뢀여야 ν•©λ‹ˆλ‹€.

@mattwynne 이 μ œμ•ˆν•œ 것(μ½”λ“œ μž¬μ‚¬μš©μ„±μ„ μ§€μ›ν•˜λŠ” μž‘μ€ 였이 κΈ°λŠ₯ μΆ”κ°€):

    When a
    Then x
    When b
    Then y

---------------------------------

    Define x
        Then p
        And y
        And q

---------------------------------

    Step a
        ...
    Step b
        ...
    Step p
        ...
    Step q
        ...
    Step y
        ...

---------------------------------

@aslakhellesoy κ°€ μ œμ•ˆν•œ 것(볡제된 μ½”λ“œλ₯Ό js ν•¨μˆ˜λ‘œ μΆ”μΆœ):

    When a
    Then x
    When b
    Then y

---------------------------------

    Step a
        ...
    Step b
        ...
    Step x
        ...
        Call f(p)
        ...
    Step y
        Call f(p)

---------------------------------

    Function f(p)
        ...

---------------------------------

단계 μ •μ˜μ—μ„œ 단계 호좜

    When a
    Then x
    When b
    Then y

---------------------------------

    Step a
        ...
    Step b
        ...
    Step x
        ...
        Call y(p)
        ...
    Step y
        ...

---------------------------------

μ™œ 또 λ‹€λ₯Έ λΆˆν•„μš”ν•œ 좔상화 μˆ˜μ€€μ΄ ν•„μš”ν•œμ§€ 아직도 이해가 λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ„€λͺ…이 μžˆμœΌμ‹ κ°€μš”?

@yunjia 이것은 κΈ°λ³Έ 콜백 μ΄λ‘ μž…λ‹ˆλ‹€.

Given(/super z/, function(cb) {
  x_is_something(97, function () {
    y_is_something(8, cb);
  });
});

바인딩 문제의 경우 ν•΄λ‹Ή ν•¨μˆ˜λ₯Ό World 의 λ©”μ„œλ“œλ‘œ μ •μ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.

function World(callback) {
    this.x_is_something = function (x, callback) {
      this.x = ...
    };

    this.y_is_something = function (y, callback) {
      this.y = ...
    };

    callback(); // tell Cucumber we're finished and to use 'this' as the world instance
  };
}
module.exports.World = World;

그런 λ‹€μŒ 단계 μ •μ˜μ—μ„œ:

Given(/super z/, function(cb) {
  var self = this;
  self.x_is_something(97, function () {
    self.y_is_something(8, cb);
  });
});

λ˜ν•œ 동기 단계 μ •μ˜λŠ” Cucumber.js 0.5+μ—μ„œ μ§€μ›λ©λ‹ˆλ‹€.

Given(/super z/, function() {
  this.x_is_something(97);
  this.y_is_something(8);
});

@inf3rno 단계 μ •μ˜λŠ” 일반 μ˜μ–΄μ™€ JS μ½”λ“œ μ‚¬μ΄μ˜ 얇은 λ²ˆμ—­ λ ˆμ΄μ–΄μž…λ‹ˆλ‹€. λ‹¨κ³„μ—μ„œ 호좜 단계λ₯Ό ν—ˆμš©ν•˜μ—¬ ν•΄λ‹Ή λ ˆμ΄μ–΄λ₯Ό 더 λ‘κ»κ²Œ λ§Œλ“­λ‹ˆλ‹€. 단계가 μ„œλ‘œ μ—°κ²°λ˜μ–΄ μœ μ§€ 관리가 맀우 μ–΄λ ΅μŠ΅λ‹ˆλ‹€.

λ˜ν•œ μ‚¬λžŒλ“€μ΄ Gherkin을 μ „ν˜€ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” μŠ€ν¬λ¦½νŒ… μ–Έμ–΄λ‘œ μ‚¬μš©ν•˜λ„λ‘ ꢌμž₯ν•©λ‹ˆλ‹€.

@inf3rno stepdef μ—μ„œ μ½”λ“œλ₯Ό μž¬μ‚¬μš©ν•˜λ €λ©΄ stepdef의 본문을 일반 μžλ°” 슀크립트 ν•¨μˆ˜λ‘œ μ΄λ™ν•˜κ³  μž¬μ‚¬μš©ν•˜μ‹­μ‹œμ˜€.

@jbpros

λ˜ν•œ μ‚¬λžŒλ“€μ΄ Gherkin을 μ „ν˜€ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” μŠ€ν¬λ¦½νŒ… μ–Έμ–΄λ‘œ μ‚¬μš©ν•˜λ„λ‘ ꢌμž₯ν•©λ‹ˆλ‹€.

당신은 plsλ₯Ό μžμ„Ένžˆ μ„€λͺ…ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” 단계 μ •μ˜κ°€ μž‘μ€ μ˜€μ΄μ— μžˆμ§€ μ•Šκ³  ν…μŠ€νŠΈ νŒ¨ν„΄λ§Œ μœ μ‚¬ν•˜κΈ° λ•Œλ¬Έμ— 연결이 무엇인지 μ΄ν•΄ν•˜μ§€ λͺ»ν•©λ‹ˆλ‹€.

@inf3rno λ‹¨κ³„μ—μ„œ 단계λ₯Ό ν˜ΈμΆœν•  수 μžˆλ‹€λ©΄ "Gherkinland"둜 λ‹€μ‹œ μ ν”„ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 단계 이름을 ꡬ문 λΆ„μ„ν•˜κ³  μ‹€ν–‰ν•  수 μžˆλŠ” 단계 μ •μ˜μ™€ μΌμΉ˜μ‹œμΌœμ•Ό ν•©λ‹ˆλ‹€. 기본적으둜 μž‘μ€ 였이 λ‚΄μ—μ„œ μž‘μ€ 였이 슀크립트λ₯Ό μž‘μ„±ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€(JS 단계 μ •μ˜ 내에 숨겨져 μžˆμ§€λ§Œ μœ μ§€ 관리 POVμ—μ„œ 더 λ‚˜λΉ μ§€λŠ” μ„ΈλΆ€ μ‚¬ν•­μž„).

@aslakhellesoy @jbpros μ•„μ΄λ””μ–΄λŠ” 단계가 λŒ€μˆ˜μ μ΄κ³  ꡬ성 κ°€λŠ₯ν•œ μœ ν˜•μ΄μ–΄μ•Ό ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. 그렇지 μ•ŠμŠ΅λ‹ˆλ‹€.

@jbpros , λ‚˜λŠ” Java ν”„λ‘œκ·Έλž˜λ°μ— μ΅μˆ™ν•˜κ³  약속에 λŒ€ν•΄ κ±±μ •ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— κ·€ν•˜μ˜ μ†”λ£¨μ…˜μ„ μ‚¬μš©ν•  κ²ƒμž…λ‹ˆλ‹€ :)

λ‹€λ₯Έ λ‹¨κ³„μ˜ κ΄€μ μ—μ„œ 단계λ₯Ό μ •μ˜ν•˜κΈ° μœ„ν•΄ 였이λ₯Ό ν™•μž₯ν•œ μ‚¬λžŒμ΄ μžˆμŠ΅λ‹ˆκΉŒ? 같은 것

Understand I log in to {site} as {user}, {pass}
    I visit {site}
    I log in as {user}, {pass}

이것이 μ‹œμŠ€ν…œμ„ ν†΅ν•œ κΈ΄ μ‚¬μš©μž 여정을 더 잘 μ„€λͺ…ν•˜κ³  μ„ ν–‰ 기술둜 μž‘μ—…ν•˜λŠ” 것을 μ„ ν˜Έν•˜λŠ” μœ μš©ν•œ ν™•μž₯인지 μ—¬λΆ€λ₯Ό μˆ™κ³ ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

이 μŠ€λ ˆλ“œλŠ” λ‹«νžŒ ν›„ 졜근 ν™œλ™μ΄ μ—†μ—ˆκΈ° λ•Œλ¬Έμ— μžλ™μœΌλ‘œ μž κ²ΌμŠ΅λ‹ˆλ‹€. κ΄€λ ¨ 버그에 λŒ€ν•œ μƒˆ 문제λ₯Ό μ—¬μ‹­μ‹œμ˜€.

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