ãã¹ãŠã®ã¹ããããçµäºããåŸã®æ€èšŒã«åœ¹ç«ã¡ãŸãã this
ã¯ã¯ãŒã«ãã€ã³ã¹ã¿ã³ã¹ã§ããå¿
èŠããããŸã
@charlierudolphããã§ãæäŒããããã®ã§ããããããå®è£
ããé©åãªæ¹æ³ã«ã€ããŠã®ãã€ã³ã¿ãå¿
èŠã§ãã æè¿åé€ãããregisterHandlerã®æ§æç³è¡£AfterStepããã£ããšæããŸãã support_code_library_builder /define_helpers.jsãèŠãŸããã ãããããããã®ããã¯ãå®è£
ããæ¹æ³ã«ã€ããŠã®ããã€ãã®æéãå¿
èŠã§ãã
ããããšã
ã¢ãª
PSçµæã®json圢åŒãå
ã«æ»ããŠããã ãããããšãããããŸãã
ããã§ã®è³ªåã¯ããããã¯ãŒã¯ãããŒã«ã©ã®ããã«åœ±é¿ããããšããããšã§ãã ããã¯ã¹ãããçµæã®ã¹ããŒã¿ã¹ãç·šéã§ããŸããããããšãåæ Œ/äžåæ Œã«ãªãå¯èœæ§ã®ããå¥ã®ã¹ããããšããŠæ©èœããŸããïŒ
ã³ã¡ã³ãã®1ã€ã§èŠãããŸã䜿çšããããŠãŒã¹ã±ãŒã¹ã¯ãã¹ãããã®åŸã«ã¹ã¯ãªãŒã³ã·ã§ãããäœæããããšã§ãã ãã¥ãŠãªã®ã«ããŒã§ã¯ãScenarioãªããžã§ã¯ããžã®ã¢ã¯ã»ã¹ãæäŸããAfterStepã䜿çšããŸããã
IMHOã¢ãã¿ãŒã¹ãããããã¯ã¯ããŠãŒã¶ãŒãã¹ãããçµæãå
çããããçµæãå€æŽã§ããªããŠãŒã¹ã±ãŒã¹ã«ã®ã¿äœ¿çšããå¿
èŠããããŸãã ãŸããåæ Œ/äžåæ Œãšãªãå¯èœæ§ã®ããå¥ã®ã¹ãããã§ãã£ãŠã¯ãªããªããšæããŸãã
@charlierudolphç§ãåæ§ã®è§£æ±ºçãæ¢ããŠããŸãã
registerHandlerãéæšå¥šã«ãªãåã«ããã®ã³ãŒãã䜿çšããŠã倱æããæé ã®åŸã«ã¹ã¯ãªãŒã³ã·ã§ãããæ®ããŸããã
`` `
this.registerHandlerïŒ 'StepResult'ãfunctionïŒeventãcallbackïŒ{
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) { ... });
});
次ã«ããã¹ãŠã®å€éšãªã³ã¯ãå¥ã®ãã¹ãã¹ãŒãã§ãã¹ããããŸãã
çŸåšãCucumber4.0.0ãšProtractor4.0.14ã䜿çšããŠããŸã
è£è¶³ïŒCucumber 1.xxã®this.AfterStepïŒïŒã¯ããã®ã¿ã€ãã®ã³ãŒããå«ãããã«èšèšãããŠãããã競åç¶æ ã«åé¡ããã£ãããããŠãŒã¹ã±ãŒã¹ã¯æ£ããæ©èœããŸããã§ããã ãã®ãããCucumber 4.0.0ã«ã¢ããã°ã¬ãŒãããé©åã«ãµããŒãããããŸã§AfterStepããžãã¯ãç¡å¹ã«ããŸããã
ããã«ã¡ã¯ã
ã¹ãããããã¯ã®ååŸã«ããã«é¢ããæŽæ°ã¯ãããŸããïŒ
AfterStepããã¯ã®åé¿çã¯ãããŸããïŒ ç¹å®ã®ãã¹ãã倱æããå Žåã¯ãã¹ã¯ãªãŒã³ã·ã§ãããæ®ããããšæããŸãã
ããã©ã«ãã®Worldã³ã³ã¹ãã©ã¯ã¿ãŒhttps://github.com/cucumber/cucumber-js/blob/master/docs/support_files/world.mdããªãŒããŒã©ã€ãããããããattachãã¯äœ¿çšã§ããŸããã
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
ããã¯ã®å¥ã®äœ¿çšäŸã次ã«ç€ºããŸãããã¢ãåæããã®ãåŸ
ã¡ãŸãïŒãã¯ã¿ãŒã¯ããã¯ãŸãã¯ã©ã³ããŒãã¿ã€ã ã¹ã¿ã³ãã䜿çšïŒã / cc @tooky @jbpros
ããã«ã¡ã¯ãã¿ããªã
ç§ã¯å®éã«ãã®åé¡ã«åãçµãã§ããŸãã
ç§ãã¡ã¯ããã¹ãŠã®ç°ãªãã¹ãããããã¹ã¯ãªãŒã³ã·ã§ãããæ®ãæ¹æ³ãæ¢ããŠããŸãã
çŸåšããã¥ãŠãªããStepDefinitionsé¢æ°ããªãŒããŒã©ã€ãããããšãèããŠããŸãã
ãããæåã®æ¹æ³ãã©ããããããªãã®ã§ãé æ ®ãªããæèŠããèãããã ããã
å®çŸ©é¢æ°ã©ãããŒã䜿çšããŠãããè¡ãæ¹æ³ãããã§èŠåŽããŠãã人ã®ããã«ïŒ https ïŒ//github.com/PeerioTechnologies/peerio-icebear/blob/dev/test/e2e/code/hooks.js#L28
ç§ãã¡ã®äž»ãªãŠãŒã¹ã±ãŒã¹ã¯ãããã§ã¯ä»ã®äŸã®ããã«ãªããŸãïŒã¹ã¯ãªãŒã³ã·ã§ããã§ãããæ§æã§ãããã°ã¢ãŒãããªã³ã«ããå Žåã«åã¹ãããã®åºåã確èªã§ããããã«ãããå€ãã®ãããã°ããŒã«ãšããŠäœ¿çšããŸãã
å¥ã®çšéïŒãŠã§ããµã€ãã«äžå®ã®æéãçµéãããšè¡šç€ºãããå¯èœæ§ã®ããã¢ãŒãã«ãããã€ããããŸãã ã·ããªãªãå®è¡ããå Žåã¯ããã¹ãŠã®ã¹ãããã®åŸã«ããããã®ã¢ãŒãã«ãããŒãžã«è¡šç€ºãããŠãããã©ããããã§ãã¯ããŠããããã®ã¢ãŒãã«ãåå ã§ãã¹ããè匱ã§ãªãããšã確èªããå¿ èŠããããŸãã
å¥ã®ãŠãŒã¹ã±ãŒã¹ïŒèª°ããããã·ã¥ããŒããåããã¬ããŒãããŒã«ïŒçŸåšå®è¡äžã®ãã¹ãã¹ããŒã¿ã¹ã以åã«å®è¡ããããã¹ãã±ãŒã¹ãªã©ïŒãäœæãããå Žåããã¥ãŠãªã¯é²è¡ç¶æ³ã®æŽæ°ã®ããã«ã¹ãããããã¯ã§ããŒã«ã«æçš¿ã§ããŸãã ããã¯çããäŸã§ãããç§ãèããä»ãããã調ã¹ãããšæã£ãŠããŸãã
KyleFairnsãããªããèšã£ãããã«ããã·ã¥ããŒãã«ã¯AfterStepãå¿ èŠã§ã
ããã«ã¡ã¯ã
åã¹ãããã®åŸã«javascriptãšã©ãŒããããã©ããã確èªããããšæããŸãã 倱æããã¹ãããã ãã§ã¯ãããŸããã
ïŒ@ markus-lundin-86ãšåããããïŒ
ä»ã§ã¯ãåã·ããªãªã®åŸã§ã®ã¿ãããè¡ãããšãã§ããŸãã
ããã§ãããã¯ããŒããããäžã«ãããŸããããããšã誰ãä»ã®è§£æ±ºçããããŸããïŒ
WebDriverIOã«ãã¥ãŠãªã®beforeStepããã¯ãšafterStepããã¯ããããåé¡ã解決ã§ããããšãçºèŠããŸããã
ã圹ã«ç«ãŠã°å¹žãã§ã...
ããã«ã¡ã¯ãã¿ããªã
ã¹ãããããã¯ã®æŽæ°ã¯ãããŸããïŒ ãŸãã¯ãåã¹ãããã®å®è¡åããã³/ãŸãã¯å®è¡åŸã«ã³ãŒããå®è¡ããããã®åé¿çã¯ãããŸããïŒ
ããã«ã¡ã¯ãã¿ããªã
@ Prasant-Sutariaãšåãç¶æ³ã§ã
ã¹ãããããã¯ãŸãã¯åé¿çã«é¢ããæŽæ°ã¯ãããŸããïŒ
åãã£ãŠæè¬ããŸãã
æŽæ°ã¯ãããŸããã 誰ããããã«å¯Ÿãããã«ãªã¯ãšã¹ããéä¿¡ããã®ããŸã åŸ ã£ãŠããŸãã
ããã«å¯ŸããããŒãããããäœãã¯ãããŸããïŒ ããã¯ãã®æ©èœã䜿çšããäžã§ã®å€§ããªåé¡ã®1ã€ã§ãããããå ¬åŒã®å£°æãããã°ããã§ãããã
@aslakhellesoyãã«ãªã¯ãšã¹ãã§å®è£ ããå¿ èŠã®ãããã§ãã¯ãªã¹ããªã©ã¯ãããŸããïŒ AFAIKïŒ1058ããã³ïŒ1121ã¯ããã®æ©èœããŸãã¯åé¿çã®ããã€ãã®æ¹æ³ãå°å ¥ããããšããŸãã
ããã¿ããªã
ãã®åé¡ã«é¢ããPRãäœæããŸããïŒ httpsïŒ//github.com/cucumber/cucumber-js/pull/1198ã
圹ã«ç«ã£ããæããŠãã ããã
@aslakhellesoy ããã®åé¡/æ©èœã®ãªã¯ãšã¹ãã«å¯ŸåŠããããã«ãäžèšã®PRïŒïŒ1198ïŒãäœæããŸããã ãããèŠãŠãã ããããŸãã¯ç§ãé£çµ¡ãã¹ã誰ããç§ã«æããŠããããŸããïŒ
ccïŒ @charlierudolph
æŽæ°ã¯ãããŸããïŒ ããã楜ãã¿ã«ããŠããŸã:)
2ã€ã®PRã衚瀺ãããŸã@ leonardonelson91
圌ãã¯ãã®æ©èœãå®è£
ããããã®æè¯ã®æ¹æ³ãèŠã€ããããªãã£ããšæããŸã
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ã¹ã¯ãªãŒã³ã·ã§ããã®BeforeStep / AfterStepãå®çŸããããã«ãsetDefinitionFunctionWrapperã®ãµã³ãã«ã³ãŒããæããŠãã ãããNightwatchJSãè©ŠããŠããŸãã
ããã«ã¡ã¯@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
ã®ã¡ãœããã§ããç§ã¯ãã€ããŠã©ããã«ç²ŸéããŠããªããããã©ã®ããã«èŠããããç¥ãããšã¯ã§ããŸãããããã£ãšãããªãã§ãããããªããïŒ
ãããã£ãŠãstepé¢æ°å
ãããšã©ãŒïŒã¢ãµãŒã·ã§ã³ã®å€±æãªã©ïŒãçºçããå Žåãããã¯ã¹ã¯ãªãŒã³ã·ã§ãããæ®ããŸãã ãšã©ãŒã®ãªãçµæãè¿ããšããäºå®ã¯éèŠã§ãã return "pending"
ã®ã¹ããããåŠçãããŠããªãéãæ»ãå€ã飲ã¿èŸŒãã§ããããšã«æ°ä»ããŸã§ããã°ããæ··ä¹±ããŠããŸããã
ã圹ã«ç«ãŠãã°
ããã«ã¡ã¯ãã¿ããªã
ãã®åé¡ã®ç¶æ³ã¯ã©ããªã£ãŠããŸããïŒ ããã§ãå©ããå¿
èŠã§ããïŒ
BeforeStepãšAfterStepã«èå³ããããŸããããã¯ããã¹ãŠã®ã¹ãããåãšè¿œå ã®ãã°æ
å ±ãå«ãããã°ããã¡ã€ã«ãäœæããã®ã«åœ¹ç«ã€ããã§ãã ã«ã¹ã¿ã ãã©ãŒããã¿ãäœæãããããå°ãç°¡åã§ãã
ããã¯https://github.com/cucumber/cucumber-js/pull/1416ã®äžéšãšããŠè¿œå ãããŸãã
https://github.com/cucumber/cucumber-js/pull/1416ã«ããã¯ãè¿œå ãããããããã®åé¡ã解決ããŸã
æãåèã«ãªãã³ã¡ã³ã
ããã«ã¡ã¯ãã¿ããªã
ã¹ãããããã¯ã®æŽæ°ã¯ãããŸããïŒ ãŸãã¯ãåã¹ãããã®å®è¡åããã³/ãŸãã¯å®è¡åŸã«ã³ãŒããå®è¡ããããã®åé¿çã¯ãããŸããïŒ