λͺ¨λ λ¨κ³κ° λλ ν μ ν¨μ± κ²μ¬μ μ μ©ν©λλ€. this
λ μΈκ³ μΈμ€ν΄μ€μ¬μΌ ν©λλ€.
@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) { ... });
});
κ·Έλ° λ€μ λͺ¨λ μΈλΆ λ§ν¬λ λ³λμ ν μ€νΈ μνΈμμ ν μ€νΈλ©λλ€.
νμ¬ 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 μ μΆκ°λμμΌλ―λ‘ μ΄ λ¬Έμ λ₯Ό μ’ λ£ν©λλ€.
κ°μ₯ μ μ©ν λκΈ
μλ λͺ¨λ,
Step hooksμ λν μ λ°μ΄νΈκ° μμ΅λκΉ? λλ κ° λ¨κ³ μ€ν μ νμ μΌλΆ μ½λλ₯Ό μ€ννκΈ° μν ν΄κ²° λ°©λ²μ΄ μμ΅λκΉ?