Cucumber-js: ์‹œ๋‚˜๋ฆฌ์˜ค ๊ฒฐ๊ณผ๊ฐ€ ์ „/ํ›„ ํ›„ํฌ๋กœ ์ „๋‹ฌ๋˜์ง€ ์•Š์Œ

์— ๋งŒ๋“  2017๋…„ 08์›” 09์ผ  ยท  19์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: cucumber/cucumber-js

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

onFailedTestStep ๋Œ€์‹  AfterStep ๋ผ๋Š” ํ›„ํฌ๋ฅผ ์ •์˜ํ•˜์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๊นŒ? Cucumber-Ruby๋Š” ์˜ค๋žซ๋™์•ˆ ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•ด ์™”์œผ๋ฉฐ ์•„์‹œ๋‹ค์‹œํ”ผ ์ผ๊ด€์„ฑ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  19 ๋Œ“๊ธ€

์ด๊ฒƒ์— ๋ฌผ๋ฆฐ. ์ด ๋•Œ๋ฌธ์— ์˜ค์ด ํ”„๋กœ์—์„œ 3์œผ๋กœ์˜ ์—…๊ทธ๋ ˆ์ด๋“œ๊ฐ€ ๋ณด๋ฅ˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

https://github.com/cucumber/cucumber-js/blob/fbff6b0fae54d2e341ee247addc60a9f05753f1d/src/runtime/test_case_runner.js#L109 ๊ฐ€ ๋ฒ”์ธ์ž…๋‹ˆ๊นŒ?

์ด ์ค‘ ์ •ํ™•ํžˆ ์–ด๋–ค ๋ถ€๋ถ„์ด ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ? ์ƒํƒœ ์ˆ ์–ด๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๊นŒ? ์ด๊ฒƒ์ด ์ด๊ฒƒ์„ ๋‘˜๋Ÿฌ์‹ผ ๋ฌธ์„œ์—์„œ ์‚ฌ์šฉ๋œ ์œ ์ผํ•œ ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

ํ˜„์žฌ scenarioResult.status , scenarioResult.scenario.uri ๋ฐ scenarioResult.scenario.line ํ•ฉ๋‹ˆ๋‹ค.

@jbpros ๊ท€ํ•˜์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ํ˜„์žฌ ์ด๋ฅผ ๋‘˜๋Ÿฌ์‹ผ ์˜ˆ์ œ๋ฅผ ๋”ฐ๋ฅด๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ(์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์‹คํŒจํ•  ๋•Œ ์Šคํฌ๋ฆฐ์ƒท ์ €์žฅ)? ๋‚˜๋Š” ํ•ญ์ƒ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ํ›„ํฌ์— ์ „๋‹ฌ๋˜๋Š” ๊ฒƒ์ด ์ •๋ง ์ด์ƒํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๊ณ  ์ด๊ฒƒ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์ฐพ๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ํ…Œ์ŠคํŠธ ๋‹จ๊ณ„๊ฐ€ ์‹คํŒจํ•  ๋•Œ ํ˜ธ์ถœํ•  ํ•จ์ˆ˜๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” onFailedTestStep ๋ผ๋Š” ์ƒˆ๋กœ์šด ์ง€์› ์ฝ”๋“œ ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์‹คํŒจํ•œ ๋‹จ๊ณ„์™€ ๋™์ผํ•œ ์„ธ๊ณ„ ์ธ์ˆ˜๋กœ ํ˜ธ์ถœ๋˜๋ฏ€๋กœ ์ด๋ฏธ์ง€ ๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ์„ ์ฒจ๋ถ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ ํ”„๋กœํ† ์ฝœ ํฌ๋งทํ„ฐ์—์„œ ์ฒจ๋ถ€ ํŒŒ์ผ์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๊ณ  ํด๋”์— ๋ณต์‚ฌํ•˜๊ธฐ ์œ„ํ•œ ์ „์šฉ ๋ชจ๋“ˆ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋•œ์žฅ์ด ์‚ฌ์šฉ์ž๋กœ์„œ ๋‚˜๋Š” ๊ทธ๋Ÿฌํ•œ ๊ธฐ๋Šฅ/์ฒ˜๋ฆฌ๊ธฐ/๊ฐ์ฒด๊ฐ€ ๊ฐ€๋Šฅํ•œ ํ•œ ๋งŽ์€ ์ปจํ…์ŠคํŠธ๋ฅผ ๊ฐ–๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. ์ „์ฒด ๊ณผ๊ฑฐ ๋ฐ ๋ฏธ๋ž˜ ์‹คํ–‰ ํŠธ๋ฆฌ(https://github.com/cucumber/cucumber-js/issues/875)์™€ ๊ฐ™์€ ์›…์žฅํ•œ ๊ฒƒ์ด ์—†์–ด๋„ ํ˜„์žฌ ๋‹จ๊ณ„์™€ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์•„๋Š” ๊ฒƒ์ด ๋งค์šฐ ์œ ์šฉ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์‹คํŒจ.
์˜ˆ๋ฅผ ๋“ค์–ด, ํƒœ๊ทธ์— ๋”ฐ๋ผ ๋กค๋ฐฑ ์ ˆ์ฐจ๋ฅผ ์ œ์–ดํ•˜๊ฑฐ๋‚˜ ๋‹จ์ˆœํžˆ ์‹คํŒจํ•œ ๋‹จ๊ณ„ ์ „์— ์‹คํ–‰๋œ ๋‹ค๋ฅธ ๋‹จ๊ณ„๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๋‹น์‹ ์ด ์ถ”๊ตฌํ•˜๋Š” ์†”๋ฃจ์…˜์ด๋ผ๋ฉด onFailedTestStep ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•ด ๋ณด์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

Hook Docs ๋„ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ScenarioResult ๋Œ€ํ•œ ์ฒซ ๋ฒˆ์งธ ๋‹จ๋ฝ์˜ ๋งํฌ๋Š” 404์ž…๋‹ˆ๋‹ค.

onFailedTestStep ๋Œ€์‹  AfterStep ๋ผ๋Š” ํ›„ํฌ๋ฅผ ์ •์˜ํ•˜์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๊นŒ? Cucumber-Ruby๋Š” ์˜ค๋žซ๋™์•ˆ ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•ด ์™”์œผ๋ฉฐ ์•„์‹œ๋‹ค์‹œํ”ผ ์ผ๊ด€์„ฑ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

@aslakhellesoy ์‚ฌ์šฉ ์‚ฌ๋ก€์— ์ง‘์ค‘ํ•˜๊ณ  ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์ผ๊ด€์„ฑ์ด ์ค‘์š”ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ๊ณณ์— ์žˆ๋‹ค๊ณ  ํ•ด์„œ ๋ชจ๋“  ๊ฒƒ์„ ๋ณต์‚ฌํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์‚ฌ๋ฌผ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์„ ๊ฒฐ์ •ํ•จ์— ๋”ฐ๋ผ ์ง„ํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹น์‹ ์ด๋‚˜ @mattwynne ๋˜๋Š” ๋ฃจ๋น„ ํŒ€์˜ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ AfterStep์ด ๋ฌด์—‡์„ ์œ„ํ•ด ๊ตฌ์ถ•๋˜์—ˆ์œผ๋ฉฐ ๋ฌด์—‡์„ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š”์ง€์— ๋Œ€ํ•ด ๋ฐํž ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ €๋Š” ๋ฃจ๋น„ ํŒ€ ์ถœ์‹ ์ด ์•„๋‹ˆ๋ผ์„œ AfterStep ๊ฐ€ ๋ฌด์—‡์„ ์œ„ํ•ด ๋งŒ๋“ค์–ด์กŒ๋Š”์ง€ ๋ชจ๋ฅด์ง€๋งŒ ๊ฐœ์ธ์ ์œผ๋กœ AfterStep ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ ๋ช‡ ๊ฐ€์ง€ ์˜ˆ๊ฐ€ ์žˆ์–ด์š”.

  1. ์‹คํŒจํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์Šคํฌ๋ฆฐ์ƒท์„ ์ฐ๊ณ  ๋ธŒ๋ผ์šฐ์ € ๋กœ๊ทธ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  2. ์‹คํŒจ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด ์ผ๋ถ€ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด ์ถ”๊ฐ€ ๋กœ๊น… ์ˆ˜ํ–‰
  3. ์ฒญ์†Œ

์šฐ๋ฆฌ์—๊ฒŒ๋Š” ์ถ”๊ฐ€ ๋กœ๊น…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์‹œ๋‚˜๋ฆฌ์˜ค์™€ ๊ฒฐ๊ณผ๊ฐ€ ์–ด์จŒ๋“  AfterStep ์ „๋‹ฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. AfterStep ์—์„œ ํ•„์š”๋กœ ํ•˜๋Š” ๋‹ค๋ฅธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋„ ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๊ณ ๋ คํ•˜์ง€๋„ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ onFailedTestStep ์™€ ๊ฐ™์€ ๊ฒƒ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋™์ผํ•œ ๊ฒƒ์„ ๋‹ฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋‘ ๊ฐ€์ง€ ์ด์ƒ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” AfterStep ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” onFailedTestStep ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ํ›„ํฌ๋ฅผ ๊ตฌํ˜„ํ•œ ์‚ฌ๋žŒ์— ๋”ฐ๋ผ ํ”„๋กœ์ ํŠธ ๋‚ด์—์„œ๋„ ๋ถˆ์ผ์น˜๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€๋Š” AfterStep ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋‹ค๋ฅธ ์ผ๋ถ€๋Š” onFailedTestStep ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค ๋ฐ”๋žŒ์งํ•˜์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@charlierudolph

๋‚˜๋Š” ๋‹น์‹ ์ด ์–ด๋””์—์„œ ์™”๋Š”์ง€ ์ดํ•ดํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ƒ๊ฐํ•˜๋Š” ์ด์œ ๋ฅผ ์ž์„ธํžˆ ์„ค๋ช…ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ํ›„ํฌ๋กœ ๋„˜์–ด๊ฐ€๋Š” ๊ฒŒ ์ •๋ง ์ด์ƒํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ

๋‚˜๋Š” ๋‘ ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ํ˜ผํ•ฉ์„ ๊ฒฐ์ฝ” ์ข‹์•„ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. Before/After ํ›„ํฌ๋Š” ์‹ค์ œ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์„ค์ •/ํ•ด์ œ์™€ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณด๊ณ ์šฉ์œผ๋กœ๋„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋”ฐ๋กœ ์‹ ๊ฒฝ์จ์•ผ ํ•  ๋ถ€๋ถ„์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์‹คํŒจํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์Šคํฌ๋ฆฐ์ƒท์„ ์ฐ๊ณ  ๋ธŒ๋ผ์šฐ์ € ๋กœ๊ทธ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

AfterStep์—์„œ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ ์‹คํŒจํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์•„๋‹Œ ์‹คํŒจํ•œ ๋‹จ๊ณ„์— ๋Œ€ํ•ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด repo์˜ ๋ชจ๋“  ์˜ˆ์ œ๊ฐ€ ์‹œ๋‚˜๋ฆฌ์˜ค ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ์ด๋ฉฐ ์ด ํŠน์ • ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ํ›„ํฌ๋ฅผ ๋งŒ๋“ค๊ณ ์ž ํ•˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๋“ค์–ด๋ณธ ์ ์ด ์—†์Šต๋‹ˆ๋‹ค.

์‹คํŒจ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด ์ผ๋ถ€ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด ์ถ”๊ฐ€ ๋กœ๊น… ์ˆ˜ํ–‰

์–ด๋–ค ์œ ํ˜•์˜ ์ถ”๊ฐ€ ๋กœ๊น…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๊นŒ?

์ฒญ์†Œ

๋‹จ๊ณ„ ํ›„ ์ •๋ฆฌํ•  ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ถ”๊ฐ€ ๋กœ๊น…์„ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด ์‹œ๋‚˜๋ฆฌ์˜ค์™€ ๊ฒฐ๊ณผ๊ฐ€ AfterStep์œผ๋กœ ์ „๋‹ฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๊ณ ๋ ค์กฐ์ฐจ ํ•˜์ง€ ์•Š์€ ๋‹ค๋ฅธ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ AfterStep์—์„œ๋„ ํ•„์š”ํ•˜๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์ˆ˜์ง‘ํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค. ๋•Œ๋•Œ๋กœ ์‚ฌ๋žŒ๋“ค์€ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ์žˆ์„ ๋•Œ ๋˜๋Š” ๋” ๋‚˜์€ ์ง€์›์„ ์œ„ํ•ด ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ ์ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฆ‰, onFailedTestStep๊ณผ ๊ฐ™์€ ๊ฒƒ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋‹ฌ์„ฑํ•˜๋Š” ๋ฐ ํ•˜๋‚˜ ์ด์ƒ์˜ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” AfterStep์„ ์‚ฌ์šฉํ•˜๊ณ  ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” onFailedTestStep์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Cucumber-js์—๋Š” ํ˜„์žฌ AfterStep ๊ฐ€ ์—†์œผ๋ฉฐ ๋‘˜ ๋‹ค ๊ตฌํ˜„ํ•  ๊ณ„ํš์ด ์—†์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” protractor-cucumber-framework ์—์„œ ์˜ค์ด 3 ์ง€์›์„ ์–ป์œผ๋ ค๊ณ  ๋…ธ๋ ฅ ์ค‘์ด๋ฉฐ ์‹ค์ œ๋กœ AfterStep ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๊ฐœ์˜ ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ•จ๊ป˜ ์—ฐ๊ฒฐํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ์•„๋‹ˆ์ง€๋งŒ ํ›จ์”ฌ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ์ด๋ฒคํŠธ ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„ ๋‚ด๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์ง€๋งŒ *-finished ์ด๋ฒคํŠธ์—์„œ ๊ธฐ๋Šฅ/์‹œ๋‚˜๋ฆฌ์˜ค/๋‹จ๊ณ„ ์ปจํ…์ŠคํŠธ๋ฅผ ์–ป์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ธฐ๋Šฅ, ์‹œ๋‚˜๋ฆฌ์˜ค ๋ฐ ๋‹จ๊ณ„์˜ ์ด๋ฆ„, URI ๋ฐ ์ค„ ๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ๋„๊ธฐ์— ๋‹ค์‹œ ๋ณด๊ณ ํ•˜๊ณ  IDE ํ†ตํ•ฉ(Intellij)์— ํŠธ๋ฆฌ์—์„œ ํ‘œ์‹œํ•˜๊ณ  ํƒ์ƒ‰ํ•  ๋ฌด์–ธ๊ฐ€๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์–ด์จŒ๋“  ๋‚ด $0.02.

๋…ผ์˜๋œ ๋ชจ๋“  ๊ธฐ๋Šฅ(๋ฐ ํ›จ์”ฌ ๋” ๋งŽ์€ ๊ฒƒ)์€ setDefinitionFunctionWrapper ์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ชจ๋“  ๋‹จ๊ณ„๋ฅผ ์‚ฌ์ „/์‚ฌํ›„ ์ž‘์—…์œผ๋กœ ๋ž˜ํ•‘ํ•˜์—ฌ ๋‹จ๊ณ„์˜ ์ž…๋ ฅ ๋ฐ ์ถœ๋ ฅ์— ๋ฐ˜์‘ํ•  ์ˆ˜ ์žˆ์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ณ€ํ˜•ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, "๋‹ค์Œ ๋‹จ๊ณ„๋Š” ์˜ค๋ฅ˜ XYZ๋กœ ์‹คํŒจํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค" ๋‹จ๊ณ„๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๋‹จ๊ณ„๋ฅผ ํ†ตํ•ด ๊ฐ ๋‹จ๊ณ„์—์„œ ์ค‘๋ณต๋œ ๋ถ€์ •์ ์ธ ๋‹จ๊ณ„๋‚˜ ๋’ค์ง‘์„ ์ˆ˜ ์žˆ๋Š” ํŠน์ˆ˜ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๊ณ ๋„ ๊นŠ์€ ๋ถ€์ •์ ์ธ ๊ฒ€์‚ฌ ๋ฐ ์˜ค๋ฅ˜ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ์‹ ์†ํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. .

AfterStep ํ›„ํฌ๊ฐ€ setDefinitionFunctionWrapper ํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์ง์žฅ์—์„œ 2.0.0์—์„œ 3.0.0์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ์‹œ๋‚˜๋ฆฌ์˜ค ๊ฒฐ๊ณผ์— ๋Œ€ํ•ด ์ •์˜๋˜์ง€ ์•Š์Œ

@paul-phillips-ark ์˜ˆ, #905๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. ์•ž์œผ๋กœ ๋‚˜์•„๊ฐ€๋Š” ๋ฐ ๋„์›€์ด ๋˜๊ณ  ์‹ถ๋‹ค๋ฉด @charlierudolph ์˜ ์˜๊ฒฌ์„ ๋‹ค๋ฃจ๋Š” ์ƒˆ ํ™๋ณด๋ฅผ ๋ถ„๊ธฐํ•˜์—ฌ ์ œ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ console.log(scenarioResult)ํ•  ๋•Œ Before ๋ฐ After ๊ธฐ๋Šฅ ๋ชจ๋‘์—์„œ ์—ฌ์ „ํžˆ ์ •์˜๋˜์ง€ ์•Š๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚ด๊ฐ€ ๋ญ”๊ฐ€๋ฅผ ๋†“์น˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ์œ„์˜ ๋Œ“๊ธ€์ด ์กฐ๋ฐ€ํ•˜๊ฒŒ ๋“ค๋ฆฐ๋‹ค๋ฉด ์‚ฌ๊ณผ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

ํ˜„์žฌ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ฐ ์‹œ๋‚˜๋ฆฌ์˜ค ์ „์— ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ฑ„์šฐ๋Š” ๊ณ ์ • ์žฅ์น˜๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ธฐ๋Šฅ์—๋Š” ํ•„์š”ํ•œ ๊ณ ์ • ์žฅ์น˜ ์„ธํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„์˜ Fixture ๊ฒฝ๋กœ๋Š” ๊ธฐ๋Šฅ์˜ ๊ฒฝ๋กœ๋ฅผ ๋ฐ˜๋ณตํ•˜๋ฏ€๋กœ uri ์˜ต์…˜๋„ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

Before({ timeout: 60 * 1000 }, scenarioResult => {
    ...
    const file = scenarioResult.scenario.feature.uri;
    ...
});

After ํ›„ํฌ์—์„œ ์šฐ๋ฆฌ ์ค‘ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์Šคํฌ๋ฆฐ์ƒท์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

After(scenarioResult => {
    if (scenarioResult.status === 'failed') {
      driverUtils.takeScreenShot(scenarioResult.scenario.name);
    }
});

@charlierudolph ์ž ์ • ์†”๋ฃจ์…˜์œผ๋กœ pull request #905๊ฐ€ ํฌํ•จ๋œ ๋ฆด๋ฆฌ์Šค๋ฅผ ์ค‘๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ด๋ฅผ ํ†ตํ•ด v2์—์„œ v3์œผ๋กœ์˜ ์ „ํ™˜์„ ์™„๋ฃŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํ˜„์žฌ ์ด ํšŒ๊ท€/๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ์ค‘๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ œ์•ˆ๋œ ๋ฆฌํŒฉํ† ๋ง์€ ๋‹ค๋ฅธ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

#905์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ์ง€๋งŒ ์ด๋ฒˆ ์ฃผ๋ง์— ์ˆ˜์ • ์‚ฌํ•ญ์„ ํ™•์ธํ•˜๊ณ  ๋ฆด๋ฆฌ์Šคํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์ด ์Šค๋ ˆ๋“œ๋Š” ๋‹ซํžŒ ํ›„ ์ตœ๊ทผ ํ™œ๋™์ด ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž๋™์œผ๋กœ ์ž ๊ฒผ์Šต๋‹ˆ๋‹ค. ๊ด€๋ จ ๋ฒ„๊ทธ์— ๋Œ€ํ•œ ์ƒˆ ๋ฌธ์ œ๋ฅผ ์—ฌ์‹ญ์‹œ์˜ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰