ã¹ãããå®çŸ©ããã®ã¹ãããã®åŒã³åºããèš±å¯ããŸãã
https://github.com/cucumber/cucumber/wiki/Calling-Steps-from-Step-Definitions
ãããå®è£
ãããšãã¯ãcucumber-rbã§ãããè¡ãããã«#steps
以å€ã®ãã¹ãŠãéæšå¥šã«ããäºå®ã§ããããšãèŠããŠãããŠãã ããã https://github.com/cucumber/cucumber/issues/68ãåç
§ããŠãã ãã
ãããããããšãã -jsã¯stepsïŒïŒã®ã¿ããµããŒãããŸãã
ããã¯ããã§ããïŒ
ããã«ã€ããŠäœãé²å±ã¯ãããŸããïŒ ããªãéèŠãªæ©èœã®ããã§ãã
ããã¯ãçŸåšã®ãã€ã«ã¹ããŒã³ïŒ0.3ïŒã®äžéšãšããŠèšç»ãããŠããŸããã 0.4ã®äžéšã§ããå¿ èŠããããŸãã
@mattwynne step()
ããµããŒãããããšæããŸãã ç§ã¯æ£ããã§ããïŒ
@jbprosã ãšæããŸãã ãã¶ãã #step
ããå§ããããšãã§ããŸãã Gherkinã解æããã®ã§ã¯ãªããã¹ããããåŒã³åºãã ããªã®ã§ãå®è£
ãç°¡åã§ãã
ç§ã¯å人çã«ãã®æ©èœãªãã§ãã¥ãŠãªã䜿çšããããšæããŸããç§ã¯ããã決ããŠäœ¿çšããããããæªãç¿æ £ãšèããŸãã ç§ã¯ãã€ã代ããã«ã¡ãœããã«å§ä»»ããããšã奜ã¿ãŸãã
æçµçã«ãããããµããŒãããå Žåã¯ãGherkinã§å®è£ ããããšããå§ãããŸãããã®ãããä»ã®äžé£ã®äœã¬ãã«ã®ã¹ãããã«ããããããã¯ãã¹ããããå®çŸ©ããæ¹æ³ããããŸãã ãã®åŸããã¥ãŠãªã¯äœã¬ãã«ã®ãã®ãåŒã³åºãããã«æ瀺ããããããã³ã°ãè¡ãããŠããããšãç¥ãå¿ èŠã¯ã»ãšãã©ãããŸããã ãããç§ã®å¥œã¿ã§ãã
TL; DRïŒæ¬åœã«steps()
/ step()
ãCucumber.jsïŒããã³-jvmã-ruby 2ãªã©ïŒã«è¿œå ããå¿
èŠããããŸããïŒ
ç§ã¯ããªãã®ãããã«å®å šã«åæããŸãã _æ®å¿µãªãã_ãããã¯Cucumber.jsã§çŸåšæãæ±ããããŠããæ©èœã§ãã
ç§ãç解ããŠããããã«ãå€ãã®äººã¯ã¹ãããå®çŸ©ã_methods_ãŸãã¯_functions_ãšèŠãªããŠããŸãã ç§ã®èŠæ¹ã§ã¯ããããã¯ããã€ãã®æµæ¢ãªèšèªæãšããã°ã©ãã³ã°èšèªã³ãŒãã®æçã®éã®ãããã³ã°ã§ããããã以äžã®ãã®ã§ã¯ãããŸããã ããã¯ãç§ãã¡ããããã®ç£ãã©ã®ããã«æ±ããã«é¢ããŠæ·±ãæå³ãæã£ãŠããŸãã
ããã°ã©ããŒã®èŠ³ç¹ããã¯ãã¹ãããå®çŸ©ã¯ã¡ãœãããšåãããã«èŠããŸãã ä»æ¥ã®Cucumber_s_ã®åŒ±ç¹ã ãšæããŸãã ã¹ãããå®çŸ©ã¯ãAPIãšããŠå ¬éããã®ã§ã¯ãªããããã°æ瀺çãªç¿»èš³ããããèŸæžãšããŠå ¬éããå¿ èŠããããŸãã
@msassakã¯ãã§ã«ããã«ã€ããŠèå³æ·±ãèããæã£ãŠããŠãCucumber2.0ã§ãããã®ããããã³ã°ããåã¢ããªã³ã°ããçŽ æŽãããä»äºããããšæããŸãã
ä»ã®ãšãããCucumber.jsã§ãã®åé¡ã«åãçµãã®ã¯æ°ãé²ãŸãªããšèšããããåŸãŸããã äžæ¹ã§ãå人çãªå¥œã¿ãæèŠã ãã§æ©èœãä¿æãããã¯ãããŸããã
ïŒ-1 ïŒïŒ-1 ïŒïŒ-1 ïŒïŒ-1 ïŒïŒ-1ïŒ
stepdefsããstepsãåŒã³åºãããšã¯ãCucumberïŒ-RubyïŒã«è¿œå ããããªãæ©èœã®1ã€ã§ããããã¯ã人ã ãã¶ãäžããã®ã«éåžžã«å€ãã®ããŒããæäŸããããã§ãã ããã¯ã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ã®ã©ããã§ãããŒãèšè¿°ããå Žåããããå¥ã®ã©ã€ãã©ãªã«ç§»åããããã«è¿œå ã®æéãè²»ããå¿
èŠã¯ãããŸãããã¹ãããå®çŸ©ãåŒã³åºãã ãã§ãã
1ã€ã®ã¹ããããåŒã³åºãããšã¯ã»ãšãã©åœ¹ã«ç«ã¡ãŸããã ç§ã¯ããã«ãã¹ãŠã®ã«ããŒã®ã¹ãããæ©èœã移æ€ããããšãèããŠããŸããã ããããç§ã®ãªã¯ãšã¹ããéããããã®ã§ãç§ã¯ããã«æéãè²»ãããŸããã§ããã
ããããšãã
@conoãèšãããã«ãããã¯ä¿®æ£ãããªãã®ã§æ²ããã§ãã1ã€ã®ã¹ããããåŒã³åºãããšã¯ã»ãšãã©åœ¹ã«ç«ãããå®éã®ã±ãŒã¹ã¯ããè€éãªæäœã§ãã
ããã¯ãããã€ãã®ãã现ããã·ããªãªãäœæããŠãããä»ã®ã·ããªãªã§ãã®æäœãç¹°ãè¿ãå Žåã«éåžžã«åœ¹ç«ã¡ãŸãã ç¹ã«ãã¹ããããè€æ°ã®ãã¡ã€ã«ã§å®çŸ©ãããŠããå Žåããã®å Žåãé¢æ°ã®åå©çšã®ä»£æ¿æ段ã¯éåžžã«ç°¡åã§ãã¯ãªãŒã³ã§ããããŸããã
ããïŒ ç§ã¯ããªããæ±ããŠããããšãæ£ç¢ºã«å®è¡ããlibãäœæããŸããïŒå¥ã®ã¹ãããããã¹ããããåŒã³åºããŸãïŒããããèŠãŠãã ããïŒ https ïŒ//github.com/hackhat/cucumberry
ãã£ãŒãããã¯ã¯å€§æè¿ã§ãïŒ
@hackhatæ¬åœã«ãã£ãããã§ããã ç§ã¯éåžžãã¹ãããå®çŸ©ã®åæéšåã奜ãã§ãã cucumber-proã¯cucumber.jsã®ãã©ã°ã€ã³ã«ãããŸãããïŒ
@ jlin412ã©ããã£ãŠé»è©±ããã°ããã®ãããããªããã©ããã ããã®å©ã£äººã¿ããã ãã£ãŒãããã¯ãããããšã
@hackhatåæã¹ããããäœæããã«ã¯ãæ§æã䜿çšããå¿ èŠããããŸãïŒthis.addStepïŒ...ïŒïŒ protractor.js / webdriver.jsã®ä»£ããã«selenium-syncã䜿çšããå¿ èŠããããŸããïŒ
@ jlin412åæãã©ã°ã€ã³ã®ã¿ã䜿çšã§ããŸãããã®æ¹æ³ã«ã€ããŠã¯ãããã¥ã¡ã³ããã芧ãã ããã ç§ã¯ã¢ãã€ã«ã䜿çšããŠãããããæ£ç¢ºãªæé ã説æããããšã¯ã§ããŸããã ãåŸ ã¡ããã ããã°ã23æ30åé ã®ãã«ãã¬ã«æéã«ã€ããŠè©³ãã説æããŸãã
@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
ãã³ãŒã«ããã¯ãåŒã³åºããŠãããããããã¯ããŸãããŸãæ©èœããŸããã
ãŸããstepãå€æ°ãã¯ãŒã«ãã³ã³ããã¹ãã«æ ŒçŽããå Žåãé¢æ°ãåŒã³åºããã³ã«å€æ°ãçµäºããããã次ã®ããã«ãã€ã³ãããå¿ èŠããããŸãã
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 [email protected]ã¯æ¬¡ã®ããã«æžããŠããŸãã
@aslakhellesoy https://github.com/aslakhellesoy次ã«ããã§ãŒã³ããæ¹æ³
ã¹ãããã³ãŒã«ïŒ 次ã®ããã«ïŒé¢æ°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ïŒïŒ;
}GivedïŒ/ super z /ãfunctionïŒcbïŒ{
x_is_somethingïŒ97ãcbïŒ;
y_is_somethingïŒ8ãcbïŒ;
}ïŒ;x_is_somethingã
y_is_somethingãäœæ¥ãçµäºããåã®ã³ãŒã«ããã¯ããŸããã¹ããããã¯ãŒã«ãã³ã³ããã¹ãã§å€æ°ãæ ŒçŽããå Žåãæçµçã«ã¯
é¢æ°ãåŒã³åºããã³ã«ã次ã®ããã«ãã€ã³ãããå¿ èŠããããŸããGivedïŒ/ super z /ãfunctionïŒcbïŒ{
x_is_something.bindïŒthisïŒïŒ97ãcbïŒ;
y_is_something.bindïŒthisïŒïŒ8ãcbïŒ;
}ïŒ;誰ãããããã®åé¡ã®è§£æ±ºçãæã£ãŠããŸãããïŒ
â
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/cucumber/cucumber-js/issues/11#issuecomment -101845619
ã
+1ãããã¯libã®äžéšã§ããå¿ èŠããããŸãã
@mattwynneãææ¡ããããšïŒã³ãŒãã®åå©çšæ§ããµããŒãããgherkinæ©èœãè¿œå ïŒïŒ
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.js0.5以éã§ãµããŒããããŠããããšã«æ³šæããŠãã ããã
Given(/super z/, function() {
this.x_is_something(97);
this.y_is_something(8);
});
@ inf3rnoã¹ãããå®çŸ©ã¯ããã¬ãŒã³ãªè±èªãšJSã³ãŒãã®éã®èã翻蚳ã¬ã€ã€ãŒã§ãã ã¹ãããããã¹ããããåŒã³åºãããšãèš±å¯ããããšã«ããããã®ã¬ã€ã€ãŒã倪ãããŸãã ã¹ãããã¯çžäºã«çµåãããä¿å®ãéåžžã«å°é£ã«ãªããŸãã
ãŸããGherkinãã¹ã¯ãªããèšèªãšããŠäœ¿çšããããšã奚å±ããŠããŸãããããã¯ãŸã£ãã䜿çšãããŠããŸããã
@ inf3rno stepdefã§ã³ãŒããåå©çšããå Žåã¯ãstepdefã®æ¬äœãéåžžã®javascripté¢æ°ã«ç§»åããŠããããåå©çšããŸãã
@jbpros
ãŸããGherkinãã¹ã¯ãªããèšèªãšããŠäœ¿çšããããšã奚å±ããŠããŸãããããã¯ãŸã£ãã䜿çšãããŠããŸããã
plsã詳ãã説æã§ããŸããã ã¹ãããã®å®çŸ©ã¯ã¬ãŒãã³ã§ã¯ãªããããã¹ããã¿ãŒã³ã®ã¿ãé¡äŒŒããŠãããããæ¥ç¶ãäœã§ãããããããŸããã
@ inf3rnoã¹ãããããã¹ããããåŒã³åºãããšãã§ããå Žåã¯ãåã³ãGherkinlandãã«ãžã£ã³ãããŸããã¹ãããåã解æããå®è¡å¯èœãªã¹ãããå®çŸ©ãšç §åããå¿ èŠããããŸãã ããªãã¯åºæ¬çã«gherkinå ã§gherkinã¹ã¯ãªãããæžããŠããŸãïŒãããã¯JSã¹ãããå®çŸ©å ã«é ãããŠããŸãããããã¯ã¡ã³ããã³ã¹POVããããã«æªåãã詳现ã§ãïŒã
@aslakhellesoy @jbprosã¢ã€ãã¢ã¯ãã¹ãããã¯ä»£æ°çã§æ§æå¯èœãªã¿ã€ãã§ãªããã°ãªããªããšããããšã§ãããããã§ã¯ãããŸããã
@jbpros ãç§ã¯Javaã§ã®ããã°ã©ãã³ã°ã«æ £ããŠããŠãçŽæã«ã€ããŠå¿é ããªãã®ã§ãããªãã®ãœãªã¥ãŒã·ã§ã³ã䜿çšããŸã:)
ä»ã®ã¹ãããã®èŠ³ç¹ããã¹ããããå®çŸ©ããããã®ãã¥ãŠãªã®æ¡åŒµãæãã€ãã人ã¯ããŸããïŒ äœãã®ãããªãã®
Understand I log in to {site} as {user}, {pass}
I visit {site}
I log in as {user}, {pass}
ãããã·ã¹ãã å ã®é·ããŠãŒã¶ãŒãžã£ãŒããŒãããé©åã«èª¬æããããã®æçšãªæ¡åŒµæ©èœã§ãããåŸæ¥æè¡ãšé£æºããããšã奜ããã©ãããèããŠããŸãã
ãã®ã¹ã¬ããã¯ãéããããåŸãæè¿ã®ã¢ã¯ãã£ããã£ããªããããèªåçã«ããã¯ãããŠããŸãã é¢é£ãããã°ã«ã€ããŠã¯ãæ°ããåé¡ãéããŠãã ããã
æãåèã«ãªãã³ã¡ã³ã
ïŒ-1 ïŒïŒ-1 ïŒïŒ-1 ïŒïŒ-1 ïŒïŒ-1ïŒ
stepdefsããstepsãåŒã³åºãããšã¯ãCucumberïŒ-RubyïŒã«è¿œå ããããªãæ©èœã®1ã€ã§ããããã¯ã人ã ãã¶ãäžããã®ã«éåžžã«å€ãã®ããŒããæäŸããããã§ãã ããã¯ãRuby stepdefããä»ã®å ŽæããåŒã³åºãããšãã§ããªãå¿åã®ã¯ããŒãžã£ãŒã䜿çšããŠããããã§ãïŒããŒããééããªãéãïŒã
JavaScriptã®å Žåã¯å¥ã®ç¶æ³ã§ãã ã¹ãããå®çŸ©ã¯ãã¡ãŒã¹ãã¯ã©ã¹é¢æ°ã䜿çšããŸãïŒ