Cucumber-js: BeforeStep / AfterStep 후크 μΆ”κ°€

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

λͺ¨λ“  단계가 λλ‚œ ν›„ μœ νš¨μ„± 검사에 μœ μš©ν•©λ‹ˆλ‹€. this λŠ” 세계 μΈμŠ€ν„΄μŠ€μ—¬μ•Ό ν•©λ‹ˆλ‹€.

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

μ•ˆλ…• λͺ¨λ‘,

Step hooks에 λŒ€ν•œ μ—…λ°μ΄νŠΈκ°€ μžˆμŠ΅λ‹ˆκΉŒ? λ˜λŠ” 각 단계 μ‹€ν–‰ 전후에 일뢀 μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜κΈ° μœ„ν•œ ν•΄κ²° 방법이 μžˆμŠ΅λ‹ˆκΉŒ?

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

@charlierudolph μ—¬κΈ°μ—μ„œ 도움을 μ£Όκ³  μ‹Άμ§€λ§Œ μ μ ˆν•œ κ΅¬ν˜„ 방법에 λŒ€ν•œ 포인터가 ν•„μš”ν•©λ‹ˆλ‹€. λ‚˜λŠ” μ΅œκ·Όμ— 제거된 registerHandler에 λŒ€ν•œ ꡬ문 섀탕 AfterStep이 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. support_code_library_builder/define_helpers.jsλ₯Ό μ‚΄νŽ΄λ³΄μ•˜μŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ΄λŸ¬ν•œ 후크λ₯Ό κ΅¬ν˜„ν•˜λŠ” 방법에 λŒ€ν•œ λͺ‡ 가지 지침이 ν•„μš”ν•©λ‹ˆλ‹€.
감사
μ•Œλ¦¬
μΆ”μ‹  κ²°κ³Ό json ν˜•μ‹μ„ 되돌렀 μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€.

μ—¬κΈ°μ„œ μ§ˆλ¬Έμ€ 이것이 μ›Œν¬ν”Œλ‘œμ— μ–΄λ–€ 영ν–₯을 μ€λ‹ˆκΉŒ? 이것은 단계 κ²°κ³Ό μƒνƒœλ₯Ό νŽΈμ§‘ν•  수 μžˆμŠ΅λ‹ˆκΉŒ? μ•„λ‹ˆλ©΄ 톡과/μ‹€νŒ¨ν•  수 μžˆλŠ” λ‹€λ₯Έ λ‹¨κ³„λ‘œ μž‘λ™ν•©λ‹ˆκΉŒ?

λŒ“κΈ€ 쀑 ν•˜λ‚˜μ—μ„œ λ³΄μ•˜κ³  λ˜ν•œ μ‚¬μš©ν•˜κ³  싢은 μ‚¬μš© μ‚¬λ‘€λŠ” 단계 후에 μŠ€ν¬λ¦°μƒ·μ„ λ§Œλ“œλŠ” κ²ƒμž…λ‹ˆλ‹€. 였이 λ£¨λΉ„μ—μ„œλŠ” Scenario κ°œμ²΄μ— λŒ€ν•œ μ•‘μ„ΈμŠ€λ₯Ό μ œκ³΅ν•˜λŠ” AfterStep을 μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€.
IMHO μ• ν”„ν„°μŠ€ν… ν›„ν¬λŠ” μ‚¬μš©μžκ°€ μŠ€ν… κ²°κ³Όλ₯Ό κ²€μ‚¬ν•˜κ³  μ‹Άμ§€λ§Œ κ²°κ³Όλ₯Ό λ³€κ²½ν•  수 μ—†μ–΄μ•Ό ν•˜λŠ” κ²½μš°μ—λ§Œ μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€. λ˜ν•œ 톡과/μ‹€νŒ¨ν•  수 μžˆλŠ” 또 λ‹€λ₯Έ 단계가 λ˜μ–΄μ„œλŠ” μ•ˆ λœλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

@charlierudolph 저도 λΉ„μŠ·ν•œ μ†”λ£¨μ…˜μ„ μ°Ύκ³  μžˆμŠ΅λ‹ˆλ‹€.
registerHandlerκ°€ 더 이상 μ‚¬μš©λ˜μ§€ μ•ŠκΈ° 전에 이 μ½”λ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ‹€νŒ¨ν•œ 단계 ν›„ μŠ€ν¬λ¦°μƒ·μ„ μ°μ—ˆμŠ΅λ‹ˆλ‹€.:

```
this.registerHandler('StepResult', ν•¨μˆ˜(이벀트, 콜백) {
var stepResult = event.getPayloadItem('stepResult');

if (stepResult.getStatus() == 'failed') {
  takeScreenshot()
    .then(function () {
      callback();
    });
} else {
  callback();
}});

````

이제 이에 λŒ€ν•œ 해결책이 μ—†μŠ΅λ‹ˆλ‹€.

μ•ˆλ…•,

λ‚˜λŠ” λŒ€λΆ€λΆ„μ˜ μŠ€λ ˆλ“œμ—μ„œ 유슀 μΌ€μ΄μŠ€κ°€ 인쇄 화면을 μ‚¬μš©ν•˜κ³  μžˆλ‹€λŠ” BeforeStep/AfterStep 후크에 κ΄€ν•΄ 읽은 것을 λ³΄μ•˜μŠ΅λ‹ˆλ‹€. 이것은 λ‚΄ μ‚¬μš© 사둀가 μ•„λ‹ˆλ©° λ‹€μŒ 후크에 λŒ€ν•œ λ‹€λ₯Έ μ‚¬μš© 사둀λ₯Ό λ§ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

λ‚΄ ν”„λ‘œμ νŠΈλŠ” λ‹€μŒμ„ μœ„ν•΄ 였이 1.x의 AfterStep 후크λ₯Ό μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€.

  • λͺ¨λ“  μ™ΈλΆ€ 링크와 같은 데이터 μˆ˜μ§‘:
    element.all(by.css('a')).each(function(link) { link.getAttribute('href').then(function(href) { ... }); });

그런 λ‹€μŒ λͺ¨λ“  μ™ΈλΆ€ λ§ν¬λŠ” λ³„λ„μ˜ ν…ŒμŠ€νŠΈ μŠˆνŠΈμ—μ„œ ν…ŒμŠ€νŠΈλ©λ‹ˆλ‹€.

  • μš”μ†Œ ID 쀑볡 확인(λͺ©μ μ€ λͺ¨λ“  IDκ°€ κ³ μœ ν•œμ§€ ν™•μΈν•˜μ—¬ HTML ν‘œμ€€μ„ μ€€μˆ˜ν•˜κ³  ν…ŒμŠ€νŠΈ 생성을 더 μ‰½κ²Œ λ§Œλ“œλŠ” κ²ƒμž…λ‹ˆλ‹€)
  • 슀크립트 였λ₯˜ 확인(AfterStep은 μ‹€μ œλ‘œ μ‹€νŒ¨ μ‹œλ‚˜λ¦¬μ˜€μ— λŒ€ν•œ After 후크에 λŒ€ν•œ λ³€μˆ˜λ₯Ό μ„€μ •ν•©λ‹ˆλ‹€).
  • λΈŒλΌμš°μ € κ²½κ³  λ¬΄μ‹œ. λͺ‡ 가지 ν…ŒμŠ€νŠΈ μ‹œλ‚˜λ¦¬μ˜€λŠ” μ›Ή λΈŒλΌμš°μ €μ—μ„œ λ¬΄μ‹œν•˜κ³  싢은 κ²½κ³  창을 μ—½λ‹ˆλ‹€. 이것은 특히 양식 및 μž…λ ₯ μš”μ†Œκ°€ μžˆμ„ λ•Œ 적용되며 λΈŒλΌμš°μ €μ—μ„œ κ²½κ³ ν•©λ‹ˆλ‹€("μ €μž₯λ˜μ§€ μ•Šμ€ λ³€κ²½ 사항이 μžˆμŠ΅λ‹ˆλ‹€...")

ν˜„μž¬ Cucumber 4.0.0 및 Protractor 4.0.14 μ‚¬μš© 쀑

μ°Έκ³ : Cucumber 1.xx의 this.AfterStep() μ‚¬μš© μ‚¬λ‘€λŠ” μ΄λŸ¬ν•œ μœ ν˜•μ˜ μ½”λ“œλ₯Ό ν¬ν•¨ν•˜λ„λ‘ μ„€κ³„λ˜μ§€ μ•Šμ•˜κ³  경쟁 쑰건에 λ¬Έμ œκ°€ μžˆλŠ” 것을 λ³΄μ•˜κΈ° λ•Œλ¬Έμ— μ œλŒ€λ‘œ μž‘λ™ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ Cucumber 4.0.0으둜 μ—…κ·Έλ ˆμ΄λ“œν•˜κ³  μ μ ˆν•œ 지원이 μžˆμ„ λ•ŒκΉŒμ§€ AfterStep λ‘œμ§μ„ λΉ„ν™œμ„±ν™”ν–ˆμŠ΅λ‹ˆλ‹€.

μ•ˆλ…•,

단계 후크 전후에 이와 κ΄€λ ¨λœ μ—…λ°μ΄νŠΈκ°€ μžˆμŠ΅λ‹ˆκΉŒ?
AfterStep 후크에 λŒ€ν•œ ν•΄κ²° 방법이 μžˆμŠ΅λ‹ˆκΉŒ? νŠΉμ • ν…ŒμŠ€νŠΈκ°€ μ‹€νŒ¨ν•œ 경우 μŠ€ν¬λ¦°μƒ·μ„ 찍고 μ‹ΆμŠ΅λ‹ˆλ‹€.

κΈ°λ³Έ World μƒμ„±μžλ₯Ό μž¬μ •μ˜ν–ˆκΈ° λ•Œλ¬Έμ— "attach"λ₯Ό μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€. https://github.com/cucumber/cucumber-js/blob/master/docs/support_files/world.md

Thnx

μ•ˆλ…•ν•˜μ„Έμš” @gajo4256 ,

λ‚˜λŠ” 였이 4.0.0κ³Ό 이 μŠ€λ‹ˆνŽ«μ„ μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

After(function (scenario) {
  if (scenario.result.status === Status.FAILED) {
    const World = this;

    return browser.takeScreenshot().then(function (buffer) {
      return World.attach(buffer, 'image/png');
    });
  }});

이것은 λͺ¨λ“  μ‹€νŒ¨ν•œ μ‹œλ‚˜λ¦¬μ˜€ 후에 μŠ€ν¬λ¦°μƒ·μ„ 찍을 κ²ƒμž…λ‹ˆλ‹€. (였이의 경우 단계가 μ‹€νŒ¨ν•  λ•Œλ§ˆλ‹€ 전체 μ‹œλ‚˜λ¦¬μ˜€κ°€ μ‹€νŒ¨ν•˜λ―€λ‘œ "단계 μ‹€νŒ¨ ν›„"와 거의 λ™μΌν•˜κΈ° λ•Œλ¬Έμ— μ €μ—κ²Œ νš¨κ³Όμ μž…λ‹ˆλ‹€.

도움이 되기λ₯Ό λ°”λžλ‹ˆλ‹€.

μ•ˆλ…•ν•˜μ„Έμš” @mracz μž…λ‹ˆλ‹€ .

thnx, λ‚˜λŠ” μ‹€μ œλ‘œ 이것을 μ‹œλ„ν–ˆμŠ΅λ‹ˆλ‹€(각 단계 후에 λ‚˜μ—κ²Œ 더 μ ν•©ν•˜κ² μ§€λ§Œ).
κΈ°λ³Έ World μƒμ„±μžλ₯Ό μž¬μ •μ˜ν–ˆκΈ° λ•Œλ¬Έμ— 일반적인 경우처럼 μ–΄λ–»κ²Œ λ‹€μ‹œ μ—°κ²°ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

Thnx

μ•ˆλ…•ν•˜μ„Έμš” @gajo4256 ,

이것은 λ‚΄ μ‚¬μš©μž μ •μ˜ 세계 κ΅¬ν˜„μ— μžˆλŠ” κ²ƒμž…λ‹ˆλ‹€.

const { setWorldConstructor } = require('cucumber');

function CustomWorld( { attach } ) {
  this.attach = attach;
}

setWorldConstructor(CustomWorld);

@mracz , ν˜„μž¬ 각 단계에 λŒ€ν•΄ λ‹€μŒμ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.

    When('I do something', function () {
        return takeScreenshot(this, () => {
            return $(...).click();
        });
    });

μŠ€ν¬λ¦°μƒ· 촬영 κΈ°λŠ₯은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

export function takeScreenshot(world, stepToExecute: () => promise.Promise<any>): promise.Promise<any> {
    return stepToExecute().then(() => {
        return doTakeScreenshot(world);
    }).catch((err) => {
        return doTakeScreenshot(world).then(() => {
            throw err;
        });
    });
}

function doTakeScreenshot(world) {
    return browser.takeScreenshot().then((screenshot) => {
        world.attach(screenshot, 'image/png');
    }).catch((err) => {
        console.warn('Could not create screenshot', err);
    });
}

μ˜ˆμ™Έμ— λŒ€ν•΄ λ„ˆλ¬΄ λ°©μ–΄μ μ΄μ—ˆμ„ μˆ˜λ„ μžˆμ§€λ§Œ μΆ”κ°€ μ½”λ“œκ°€ μ‹€μ œ ν…ŒμŠ€νŠΈ κ²°κ³Όλ₯Ό λ°©ν•΄ν•˜μ§€ μ•Šλ„λ‘ μ΅œμ„ μ„ λ‹€ν–ˆμŠ΅λ‹ˆλ‹€. μ§€κΈˆ λ‚΄κ°€ ν•  수 μžˆλŠ” μ΅œμ„  AfterStep 후크가 μž‘λ™ν•˜λ©΄ μƒμš©κ΅¬λ₯Ό 더 적게 μΆ”κ°€ν•  수 μžˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

κ·ΈλŸ¬λ‚˜ 후크가 ν•˜μ§€ μ•Šμ„ 일은 화면을 λ³€κ²½ν•˜μ§€ μ•ŠλŠ” μ–΄μ„€μ…˜μ„ λ§Œλ“€ λ•Œ μŠ€ν¬λ¦°μƒ·μ„ κ±΄λ„ˆλ›°λŠ” κ²ƒμž…λ‹ˆλ‹€(예: Then some element is not shown ). ν™•μž₯ κ°€λŠ₯ν•œ 세계 κ°œμ²΄κ°€ 도움이 될 수 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

λ‹€μŒμ€ AfterStep ν›„ν¬μ˜ 또 λ‹€λ₯Έ μ‚¬μš© μ‚¬λ‘€μž…λ‹ˆλ‹€. ν”Όμ–΄κ°€ 동기화될 λ•ŒκΉŒμ§€ κΈ°λ‹€λ¦½λ‹ˆλ‹€(벑터 μ‹œκ³„ λ˜λŠ” lamport νƒ€μž„μŠ€νƒ¬ν”„ μ‚¬μš©). /cc @tooky @jbpros

μ—¬λŸ¬λΆ„, μ•ˆλ…•ν•˜μ„Έμš”.
μ €λŠ” μ‹€μ œλ‘œ 이 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ…Έλ ₯ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

μš°λ¦¬λŠ” λͺ¨λ“  λ‹¨κ³„μ—μ„œ μŠ€ν¬λ¦°μƒ·μ„ 찍을 방법을 μ°Ύκ³  μžˆμŠ΅λ‹ˆλ‹€.
μ§€κΈˆ μš°λ¦¬λŠ” μ˜€μ΄μ—μ„œ StepDefinitions ν•¨μˆ˜λ₯Ό μž¬μ •μ˜ν•˜λŠ” 것에 λŒ€ν•΄ μƒκ°ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

그것이 μ΅œμ„ μ˜ 방법인지 λͺ¨λ₯΄κ² μœΌλ‹ˆ μ£Όμ €ν•˜μ§€ 말고 그것에 λŒ€ν•΄ μ˜κ²¬μ„ μ£Όμ‹­μ‹œμ˜€!

μ—¬κΈ°μ—μ„œ κ³ κ΅°λΆ„νˆ¬ν•˜λŠ” μ‚¬λžŒμ„ μœ„ν•΄ μ •μ˜ ν•¨μˆ˜ 래퍼λ₯Ό μ‚¬μš©ν•˜μ—¬ 이 μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 방법이 μžˆμŠ΅λ‹ˆλ‹€. https://github.com/PeerioTechnologies/peerio-icebear/blob/dev/test/e2e/code/hooks.js#L28

우리의 μ£Όμš” μ‚¬μš© μ‚¬λ‘€λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€. μŠ€ν¬λ¦°μƒ·μ΄μ§€λ§Œ κ΅¬μ„±μ—μ„œ 디버깅 λͺ¨λ“œλ₯Ό 켜면 각 λ‹¨κ³„μ˜ 좜λ ₯을 λ³Ό 수 μžˆλ„λ‘ 더 λ§Žμ€ 디버깅 λ„κ΅¬λ‘œ μ‚¬μš©ν•©λ‹ˆλ‹€.

또 λ‹€λ₯Έ μš©λ„: μ›Ήμ‚¬μ΄νŠΈμ— 일정 μ‹œκ°„μ΄ μ§€λ‚˜λ©΄ λͺ‡ 가지 λͺ¨λ‹¬μ΄ ν‘œμ‹œλ  수 μžˆμŠ΅λ‹ˆλ‹€. μ‹œλ‚˜λ¦¬μ˜€λ₯Ό μ‹€ν–‰ν•˜λŠ” 경우 μ΄λŸ¬ν•œ λͺ¨λ‹¬λ‘œ 인해 ν…ŒμŠ€νŠΈκ°€ μ·¨μ•½ν•˜μ§€ μ•Šμ€μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ λͺ¨λ“  단계 후에 ν•΄λ‹Ή λͺ¨λ‹¬μ΄ νŽ˜μ΄μ§€μ— μžˆλŠ”μ§€ 확인해야 ν•©λ‹ˆλ‹€.

또 λ‹€λ₯Έ μ‚¬μš© 사둀: λˆ„κ΅°κ°€ λŒ€μ‹œλ³΄λ“œ(ν˜„μž¬ μ‹€ν–‰ 쀑인 ν…ŒμŠ€νŠΈ μƒνƒœ, 이전에 μ‹€ν–‰λœ ν…ŒμŠ€νŠΈ 사둀 λ“±)κ°€ ν¬ν•¨λœ 보고 도ꡬλ₯Ό λ§Œλ“€κ³ μž ν•œλ‹€λ©΄ μ˜€μ΄λŠ” 진행 상황에 λŒ€ν•œ μ—…λ°μ΄νŠΈλ₯Ό μœ„ν•΄ 단계 ν›„ν¬μ—μ„œ 도ꡬ에 κ²Œμ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€. νŠΉμ΄ν•œ μ˜ˆλΌλŠ” κ±Έ μ••λ‹ˆλ‹€. ν•˜μ§€λ§Œ μ§€κΈˆ 생각해 λ³΄λ‹ˆ 관심이 κ°€λŠ” λΆ€λΆ„μž…λ‹ˆλ‹€.

KyleFairns, λ§μ”€ν•˜μ‹  λŒ€λ‘œ λŒ€μ‹œλ³΄λ“œμš© AfterStep이 ν•„μš”ν•©λ‹ˆλ‹€.

μ•ˆλ…•ν•˜μ„Έμš”,

각 단계 후에 μžλ°”μŠ€ν¬λ¦½νŠΈ 였λ₯˜κ°€ μžˆλŠ”μ§€ ν™•μΈν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. μ‹€νŒ¨ν•œ λ‹¨κ³„λΏλ§Œμ΄ μ•„λ‹™λ‹ˆλ‹€.
(@markus-lundin-86κ³Ό μ•½κ°„ 동일)
이제 각 μ‹œλ‚˜λ¦¬μ˜€ μ΄ν›„μ—λ§Œ κ·Έλ ‡κ²Œ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
이것이 λ‘œλ“œλ§΅μ— μžˆμŠ΅λ‹ˆκΉŒ? μ•„λ‹ˆλ©΄ λ‹€λ₯Έ μ†”λ£¨μ…˜μ΄ μžˆλŠ” μ‚¬λžŒμ΄ μžˆμŠ΅λ‹ˆκΉŒ?

방금 WebDriverIO에 λ‚΄ 문제λ₯Ό ν•΄κ²°ν•˜λŠ” μ˜€μ΄μ— λŒ€ν•œ beforeStep 및 afterStep 후크가 μžˆλ‹€λŠ” 것을 λ°œκ²¬ν–ˆμŠ΅λ‹ˆλ‹€.

도움이 되기λ₯Ό λ°”λžλ‹ˆλ‹€...

μ•ˆλ…• λͺ¨λ‘,

Step hooks에 λŒ€ν•œ μ—…λ°μ΄νŠΈκ°€ μžˆμŠ΅λ‹ˆκΉŒ? λ˜λŠ” 각 단계 μ‹€ν–‰ 전후에 일뢀 μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜κΈ° μœ„ν•œ ν•΄κ²° 방법이 μžˆμŠ΅λ‹ˆκΉŒ?

μ•ˆλ…•ν•˜μ„Έμš” μ—¬λŸ¬λΆ„,
@Prasant-Sutaria와 같은 μƒν™©μ—μ„œ.
단계 후크 λ˜λŠ” ν•΄κ²° 방법에 λŒ€ν•œ μ—…λ°μ΄νŠΈκ°€ μžˆμŠ΅λ‹ˆκΉŒ?
미리 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€.

μ—…λ°μ΄νŠΈκ°€ μ—†μŠ΅λ‹ˆλ‹€. μ—¬μ „νžˆ λˆ„κ΅°κ°€κ°€ 이에 λŒ€ν•œ pull μš”μ²­μ„ μ œμΆœν•˜κΈ°λ₯Ό 기닀리고 μžˆμŠ΅λ‹ˆλ‹€.

이에 λŒ€ν•œ λ‘œλ“œλ§΅μ΄λ‚˜ λ‚΄μš©μ΄ μžˆμŠ΅λ‹ˆκΉŒ? 이것이 이 κΈ°λŠ₯을 κ°–λŠ” μ£Όμš” κ³ μΆ© 쀑 ν•˜λ‚˜μ΄λ―€λ‘œ 곡식 μ„±λͺ…이 쒋을 κ²ƒμž…λ‹ˆλ‹€.

@aslakhellesoy μ²΄ν¬λ¦¬μŠ€νŠΈλ‚˜ pull-requestκ°€ κ΅¬ν˜„ν•΄μ•Ό ν•˜λŠ” 것이 μžˆμŠ΅λ‹ˆκΉŒ? AFAIK #1058 및 #1121은 이 κΈ°λŠ₯을 κ°€μ Έμ˜€κ±°λ‚˜ λͺ‡ 가지 ν•΄κ²° 방법을 μ‹œλ„ν•©λ‹ˆλ‹€.

μ–˜λ“€ μ•„,
방금 이 λ¬Έμ œμ— λŒ€ν•œ PR을 λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€: https://github.com/cucumber/cucumber-js/pull/1198.
μœ μš©ν•˜λ‹€κ³  μƒκ°λ˜λ©΄ μ•Œλ €μ£Όμ‹­μ‹œμ˜€.

@aslakhellesoy , 이 문제/κΈ°λŠ₯ μš”μ²­μ„ ν•΄κ²°ν•˜κΈ° μœ„ν•΄ μœ„μ˜ PR(#1198)을 λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€. 그것을 μ‚΄νŽ΄λ³΄μ‹œκ±°λ‚˜ μ œκ°€ 연락해야 ν•  μ‚¬λžŒμ„ μ•Œλ € μ£Όμ‹œκ² μŠ΅λ‹ˆκΉŒ?
μ°Έμ‘°: @charlierudolph

μ–΄λ–€ μ—…λ°μ΄νŠΈ? 그것도 κΈ°λŒ€λ©λ‹ˆλ‹€ :)

@leonardonelson91의 PR이 2개 λ³΄μž…λ‹ˆλ‹€.
이 κΈ°λŠ₯을 κ΅¬ν˜„ν•˜λŠ” κ°€μž₯ 쒋은 방법을 찾지 λͺ»ν•œ 것 κ°™μŠ΅λ‹ˆλ‹€.
https://github.com/cucumber/cucumber-js/pull/1198
https://github.com/cucumber/cucumber-js/pull/1058

@charlierudolph BeforeStep 및 AfterStep 에 λŒ€ν•΄ λ“±λ‘λœ κΈ°λŠ₯이 단계가 μ‹œκ°„ μ΄ˆκ³Όλ˜λ”λΌλ„ μ—¬μ „νžˆ μ‹€ν–‰λ˜μ–΄μ•Ό ν•˜λŠ”μ§€ 여뢀에 λŒ€ν•œ 견해가 μžˆμŠ΅λ‹ˆκΉŒ?

μ—¬κΈ° μžˆλŠ” λ‹€λ₯Έ λͺ‡ μ‚¬λžŒκ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ μ €λŠ” setDefinitionFunctionWrapper λ₯Ό μ‚¬μš©ν•˜μ—¬ μŠ€ν¬λ¦°μƒ· μž‘μ—…μ„ μˆ˜ν–‰ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. ν…ŒμŠ€νŠΈ 단계가 μ‹œκ°„ 초과될 λ•Œλ₯Ό μ œμ™Έν•˜κ³ λŠ” ν›Œλ₯­ν•˜κ²Œ μž‘λ™ν•©λ‹ˆλ‹€. μ œκ°€ ν•  수 μžˆλŠ” μ΅œμ„ μ€ 단계가 μ—¬μ „νžˆ ν™œμ„± μƒνƒœμΈ λ™μ•ˆ λ°œμƒν•˜λ―€λ‘œ λΈŒλΌμš°μ € 계츑을 μ‚¬μš©ν•©λ‹ˆλ‹€. setDefinitionFunctionWrapper 에 λŒ€ν•œ μˆ˜μ • μž‘μ—…μ„ ν•˜κ³  μ‹Άμ§€λ§Œ 여기에도 μ˜λ„κ°€ 무엇인지 μ•Œκ³  μ‹Άμ—ˆμŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” 단계가 톡과/μ‹€νŒ¨ν•˜λŠ”μ§€ 여뢀에 관계없이 BeforeStep/AfterStep이 싀행될 κ²ƒμœΌλ‘œ μ˜ˆμƒν•©λ‹ˆλ‹€(μ‹œκ°„ 초과 λ˜λŠ” κΈ°νƒ€λ‘œ 인해)

여기에 μŠ€ν¬λ¦°μƒ·μ΄ μ•„λ‹Œ μΆ”κ°€ μ‚¬μš© 사둀λ₯Ό μΆ”κ°€ν•˜κΈ°λ§Œ ν•˜λ©΄ λ©λ‹ˆλ‹€. 이벀트 기반 μ‹œμŠ€ν…œμ„ ν…ŒμŠ€νŠΈ 쀑이며 ν…ŒμŠ€νŠΈλ‘œ 인해 μ΄λ²€νŠΈκ°€ μƒμ„±λ©λ‹ˆλ‹€. 그런 λ‹€μŒ ν•΄λ‹Ή 이벀트λ₯Ό 읽고 μ‹œμŠ€ν…œμ„ λ³€κ²½ν•©λ‹ˆλ‹€.

λ‹€μŒ λ‹¨κ³„μ—μ„œλŠ” μ‹œμŠ€ν…œμ΄ λͺ¨λ“  이벀트λ₯Ό μ²˜λ¦¬ν•΄μ•Ό ν•˜λŠ” μ˜ˆμƒ μƒνƒœμΈμ§€ ν™•μΈν•©λ‹ˆλ‹€. λŒ€κΈ°μ—΄μ΄ μ™„μ „νžˆ μ²˜λ¦¬λ˜μ—ˆκ³  λ‹€μŒ λ‹¨κ³„λ‘œ μ΄λ™ν•˜κΈ° 전에 보λ₯˜ μƒνƒœμ— 아무것도 μ—†λŠ”μ§€ ν™•μΈν•˜λŠ” κΈ°λŠ₯을 μ›ν•©λ‹ˆλ‹€.

ν˜„μž¬ μœ νš¨μ„± 검사 λ‹¨κ³„μ—μ„œ 이벀트 슀트림의 일뢀 폴링을 μˆ˜ν–‰ν•˜κ³  μžˆμ§€λ§Œ κ·Έλƒ₯ 후크에 λ„£λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. λ‹€μŒ λ‹¨κ³„λ‘œ λ„˜μ–΄κ°€κΈ° 전에 μ‹œμŠ€ν…œμ΄ μ•ˆμ •μ μΈ μƒνƒœμ—¬μ•Ό ν•˜λŠ” 것은 μœ λΉ„μΏΌν„°μŠ€ μš”κ΅¬ 사항이기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

@davidjgoss @charlierudolph μŠ€ν¬λ¦°μƒ·μ„ μ–»κΈ° μœ„ν•΄ setDefinitionFunctionWrapper의 μƒ˜ν”Œ 예제 μ½”λ“œλ₯Ό λ„μ™€μ£Όμ‹œκ² μŠ΅λ‹ˆκΉŒ? BeforeStep/AfterStep?, μ €λŠ” Nightwatch JS둜 μ‹œλ„ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

μ•ˆλ…•ν•˜μ„Έμš” @RArkasali μ—¬κΈ° λ‚΄κ°€ μž‘μ—…ν•˜λŠ” ν”„λ‘œμ νŠΈμ˜ μŠ€λ‹ˆνŽ«μ΄ μžˆμŠ΅λ‹ˆλ‹€.

import {setDefinitionFunctionWrapper} from "cucumber";

setDefinitionFunctionWrapper(function(fn) {
    return async function(...args) {
        try {
            return await fn.apply(this, args);
        } catch (ex) {
            await this.takeScreenshot();
            throw ex;
        }
    };
});

(μ—¬κΈ°μ„œ takeScreenshot λŠ” μ‚¬μš©μž μ •μ˜ World 의 λ©”μ†Œλ“œλ‘œ μ‹€μ œ μŠ€ν¬λ¦°μƒ·μ„ μ°λŠ” μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€. λ‚˜λŠ” μ•Όκ°„ μ‹œκ³„μ— μ΅μˆ™ν•˜μ§€ μ•Šμ•„ μ–΄λ–»κ²Œ μƒκ²ΌλŠ”μ§€ μ•Œ 수 μ—†μ§€λ§Œ be.)

λ”°λΌμ„œ 단계 ν•¨μˆ˜ λ‚΄μ—μ„œ 였λ₯˜(μ–΄μ„€μ…˜ μ‹€νŒ¨μ™€ 같은)κ°€ μžˆλŠ” 경우 μŠ€ν¬λ¦°μƒ·μ΄ μ°νž™λ‹ˆλ‹€. 였λ₯˜κ°€ μ•„λ‹Œ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•œλ‹€λŠ” 사싀이 μ€‘μš”ν•©λ‹ˆλ‹€. λ‚˜λŠ” μž μ‹œ λ™μ•ˆ return "pending" 단계가 μ²˜λ¦¬λ˜μ§€ μ•Šμ•„ ν˜Όλž€μŠ€λŸ¬μ›Œ ν–ˆμŠ΅λ‹ˆλ‹€.

도움이 λ˜μ—ˆκΈ°λ₯Ό λ°”λžλ‹ˆλ‹€

μ•ˆλ…•ν•˜μ„Έμš” μ—¬λŸ¬λΆ„,
이 문제의 μƒνƒœλŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ? μ—¬μ „νžˆ 도움이 ν•„μš”ν•©λ‹ˆκΉŒ?
μ €λŠ” BeforeStepκ³Ό AfterStep에 관심이 μžˆμŠ΅λ‹ˆλ‹€. λͺ¨λ“  단계 이름과 μΆ”κ°€ 둜그 정보가 ν¬ν•¨λœ "둜그" 파일이 있으면 도움이 되기 λ•Œλ¬Έμž…λ‹ˆλ‹€. μ»€μŠ€ν…€ 포맀터λ₯Ό λ§Œλ“œλŠ” 것보닀 쑰금 더 μ‰½μŠ΅λ‹ˆλ‹€.

이것은 https://github.com/cucumber/cucumber-js/pull/1416 κ³Ό λ³„λ„λ‘œ μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

후크가 https://github.com/cucumber/cucumber-js/pull/1416 에 μΆ”κ°€λ˜μ—ˆμœΌλ―€λ‘œ 이 문제λ₯Ό μ’…λ£Œν•©λ‹ˆλ‹€.

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