<p>์˜ค์ด-js๋Š” ๋‹จ๊ณ„ ์ •์˜๋ฅผ ์ฐพ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค</p>

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

์•ˆ๋…•ํ•˜์„ธ์š”, ์ €๋Š” ์˜ค์ด-js๊ฐ€ ๋‚ด ๋‹จ๊ณ„ ์ •์˜๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ๋ช‡ ์‹œ๊ฐ„ ๋™์•ˆ ๋…ธ๋ ฅํ•ด ์˜จ ์ดˆ๋ณด์ž์ž…๋‹ˆ๋‹ค. ์ด ๊ฐ„๋‹จํ•œ ์˜ˆ๋ฅผ ์ƒ๊ฐํ•ด ๋ƒˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ/foo.feature์—์„œ:

Feature: Foo
  Scenario: Bar
    Given FooBar

features/step_definitions/step_defs.js์—์„œ:

var {defineSupportCode} = require('cucumber');

defineSupportCode(function({Given}) {
    Given('FooBar', function () {
      return 'pending';
    });    
});

๋‚˜๋Š”์ด ๊ฒฐ๊ณผ๋ฅผ ์–ป๋Š”๋‹ค :

Feature: Foo

  Scenario: Bar
  ? Given FooBar

Warnings:

1) Scenario: Bar - features\foo.feature:2
   Step: Given FooBar - features\foo.feature:3
   Message:
     Undefined. Implement with the following snippet:

       Given('FooBar', function (callback) {
         // Write code here that turns the phrase above into concrete actions
         callback(null, 'pending');
       });

1 scenario (1 undefined)
1 step (1 undefined)
0m00.000s
help wanted

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

๊ดœ์ฐฎ์€. ๋‚˜๋Š” ์ด๊ฒƒ์„ ์•Œ์•„ ๋ƒˆ๋‹ค๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค.

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

๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋กœ์ปฌ ์„ค์น˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚ด ๊ฒฝ๋กœ์— "./node_modules/.bin"์„ ์ถ”๊ฐ€ํ•˜์—ฌ Mac์—์„œ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

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

์ด๊ฒƒ์ด Windows์—์„œ ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์ „์—ญ ์„ค์น˜๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์–ธ๊ธ‰ํ•˜๊ธฐ ์œ„ํ•ด ์„ค๋ช…์„œ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

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

๋‚˜๋Š” ์˜ค์ด-js๊ฐ€ ๋‹จ๊ณ„ ์ •์˜ ํŒŒ์ผ์„ ์ฐพ๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋‚ด๊ฐ€ ๊ทธ๊ฒƒ์— ๊ตฌ๋ฌธ ์˜ค๋ฅ˜๋ฅผ ์ฃผ์ž…ํ•˜๋ฉด ์˜ค์ด-js๊ฐ€ ์˜ค๋ฅ˜๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ณด๊ณ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์–ด๋–ค ๋ฒ„์ „์˜ ์˜ค์ด-js๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

๊ทธ๊ฒƒ์€ 2.0.0-rc.6์„ ๋งํ•ฉ๋‹ˆ๋‹ค

๋˜ํ•œ ์ดˆ๋ณด์ž์ด๊ณ  ๋™์ผํ•œ ๋ฒ„์ „์˜ cucumber.js๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
๋‹ค๋ฅธ ํŠœํ† ๋ฆฌ์–ผ์„ ๋”ฐ๋ฅด๊ณ  ์žˆ์—ˆ์ง€๋งŒ ์ด ์‹œ์ ์—์„œ ๋ง‰ํ˜”์Šต๋‹ˆ๋‹ค.

/features/ํ•ญ๋ชฉ ์ถ”๊ฐ€.๊ธฐ๋Šฅ

Feature: Shopper can add an item to their Grocery List
  As a grocery shopper
  I want to add an item to my grocery list
  So that I can remember to buy that item at the grocery store

  Scenario: Item added to grocery list
    Given I have an empty grocery list
    When I add an item to the list
    Then The grocery list contains a single item

  Scenario: Item accessible from grocery list
    Given I have an empty grocery list
    When I add an item to the list
    Then I can access that item from the grocery list`

/features/step_definitions/add-item.steps.js
'use strict';

module.exports = function() {

    Given('I have an empty grocery list', function (callback) {
         // Write code here that turns the phrase above into concrete actions
         callback(null, 'pending');
       });


    When('I add an item to the list', function (callback) {
         // Write code here that turns the phrase above into concrete actions
         callback(null, 'pending');
       });

    Then('The grocery list contains a single item', function (callback) {
         // Write code here that turns the phrase above into concrete actions
         callback(null, 'pending');
       });

    Then('I can access that item from the grocery list', function (callback) {
         // Write code here that turns the phrase above into concrete actions
         callback(null, 'pending');
       });

}

$ node_modules/.bin/cucumber-js ๋ฐ˜ํ™˜

Feature: Shopper can add an item to their Grocery List

    As a grocery shopper
    I want to add an item to my grocery list
    So that I can remember to buy that item at the grocery store

  Scenario: Item added to grocery list
  ? Given I have an empty grocery list
  ? When I add an item to the list
  ? Then The grocery list contains a single item

  Scenario: Item accessible from grocery list
  ? Given I have an empty grocery list
  ? When I add an item to the list
  ? Then I can access that item from the grocery list

Warnings:

1) Scenario: Item added to grocery list - features/add-item.feature:6
   Step: Given I have an empty grocery list - features/add-item.feature:7
   Message:
     Undefined. Implement with the following snippet:

       Given('I have an empty grocery list', function (callback) {
         // Write code here that turns the phrase above into concrete actions
         callback(null, 'pending');
       });

2) Scenario: Item added to grocery list - features/add-item.feature:6
   Step: When I add an item to the list - features/add-item.feature:8
   Message:
     Undefined. Implement with the following snippet:

       When('I add an item to the list', function (callback) {
         // Write code here that turns the phrase above into concrete actions
         callback(null, 'pending');
       });

3) Scenario: Item added to grocery list - features/add-item.feature:6
   Step: Then The grocery list contains a single item - features/add-item.feature:9
   Message:
     Undefined. Implement with the following snippet:

       Then('The grocery list contains a single item', function (callback) {
         // Write code here that turns the phrase above into concrete actions
         callback(null, 'pending');
       });

4) Scenario: Item accessible from grocery list - features/add-item.feature:11
   Step: Given I have an empty grocery list - features/add-item.feature:12
   Message:
     Undefined. Implement with the following snippet:

       Given('I have an empty grocery list', function (callback) {
         // Write code here that turns the phrase above into concrete actions
         callback(null, 'pending');
       });

5) Scenario: Item accessible from grocery list - features/add-item.feature:11
   Step: When I add an item to the list - features/add-item.feature:13
   Message:
     Undefined. Implement with the following snippet:

       When('I add an item to the list', function (callback) {
         // Write code here that turns the phrase above into concrete actions
         callback(null, 'pending');
       });

6) Scenario: Item accessible from grocery list - features/add-item.feature:11
   Step: Then I can access that item from the grocery list - features/add-item.feature:14
   Message:
     Undefined. Implement with the following snippet:

       Then('I can access that item from the grocery list', function (callback) {
         // Write code here that turns the phrase above into concrete actions
         callback(null, 'pending');
       });

2 scenarios (2 undefined)
6 steps (6 undefined)
0m00.000s

์ด ์‹œ์ ์—์„œ world.js ํŒŒ์ผ์€ ํฌํ•จ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

@dunlop-ben 1.0๊ณผ 2.0 ๋ฆด๋ฆฌ์Šค ํ›„๋ณด์˜ ์ฐจ์ด์ ์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ๋กœ๊ทธ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. ๋‹จ๊ณ„๋ฅผ ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋ณ€๊ฒฝ๋˜์—ˆ์œผ๋ฉฐ ๊ท€ํ•˜์˜ ์˜ˆ์ œ๋Š” 1.0 ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

@jeffmath ๋‚˜์—๊ฒŒ ์•„๋ฌด ๋ฌธ์ œ๊ฐ€ ์—†์–ด ๋ณด์ž…๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ๊ฐ€ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Mac์—์„œ ์žฌ์ƒํ•˜๋ฉด ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ๋ฒ„์ „์˜ ๋…ธ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ฆฌ๊ณ  ๋‹น์‹ ์ด Windows ์ปดํ“จํ„ฐ์— ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๊ฒฝ๋กœ์—์„œ ๋งž์Šต๋‹ˆ๊นŒ?

@charlierudolph - ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์„ ์กฐ์‚ฌํ–ˆ๊ณ  ๋น„์Šทํ•œ ๊ฒฐ๊ณผ๋กœ ๋ช‡ ๊ฐ€์ง€ ๋‹ค๋ฅธ ์˜ˆ๋ฅผ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์—ฌ๊ธฐ์—์„œ ๊ธฐ๋Šฅ ๋ฐ ๋‹จ๊ณ„ ์ •์˜๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค. http://cucumber.github.io/cucumber-js/

๋‹จ๊ณ„ ๋ฐ/๋˜๋Š” ํŒŒ์ผ์ด ๋ˆ„๋ฝ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ €๋ฅผ ์•ˆ๋‚ดํ•ด ์ค„ ์ˆ˜ ์žˆ๋Š” ๊ณณ์ด ์žˆ๋‹ค๋ฉด ์ •๋ง ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” Github์˜ ๋ฌธ์„œ๋ฅผ ์ฝ๋Š” ๋ฐ ์šด์ด ๋งŽ์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

Windows 7์˜ @charlierudolph ๋…ธ๋“œ 6.4.0

@charlierudolph ๋น„์Šทํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ •ํ™•ํžˆ https://github.com/cucumber/cucumber-js/blob/master/docs/nodejs_example.md๋ฅผ ๋”ฐ๋ฅด๊ณ  ๋ฌธ์ œ๊ฐ€ ๊ณ„์† ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ์„ค์ •์€

  • ๋…ธ๋“œ 7.4.0
  • ์šด์˜ ์ฒด์ œ: ์œˆ๋„์šฐ 10
  • ์˜ค์ด 2.0.0 -rc.6

@jeffmath @TheAdamW ์ฃ„์†กํ•˜์ง€๋งŒ ์ €๋Š” Windows ์‹œ์Šคํ…œ์ด ์—†์–ด์„œ ์ด๋ฅผ ์ถ”์ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” Windows ์‹œ์Šคํ…œ์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด appveyor๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ฐจ์ด์ ์ด ๋ฌด์—‡์ธ์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹น์‹  ์ค‘ ํ•œ ์‚ฌ๋žŒ์ด ์ด๊ฒƒ์„ ํŒŒํ—ค์ณ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚ด๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋„์›€์„ ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

์ €์—๊ฒŒ๋Š” ./node_modules/.bin/cucumberjs ์“ฐ๊ณ  ์žˆ์œผ๋ฉด ์ž‘๋™ํ•˜์ง€๋งŒ ์ „์—ญ์ ์œผ๋กœ ์„ค์น˜๋œ cucumberjs (๋™์ผํ•œ ๋ฒ„์ „ 2.0.0-rc.6 )๋งŒ ์“ฐ๋Š” ๊ฒฝ์šฐ์—๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋™์ผํ•œ ์˜ค๋ฅ˜: ์˜ค์ด๊ฐ€ ๋‹จ๊ณ„ ์ •์˜๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค. ๋™์ผํ•œ ํด๋” ๊ตฌ์กฐ๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์€ Linux์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

  • ๋งˆ๋””. 4.4.0 ๋ฐ 4.6
  • ์šด์˜ ์ฒด์ œ: ์œˆ๋„์šฐ 10
  • ์˜ค์ด 2.0.0 -rc.6

๋‹จ๊ณ„ ์ •์˜ ๊ฒฝ๋กœ/ํด๋”/ํŒจํ„ด์„ ๊ฐ•์ œ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?
BTW @MartinDelille ์˜ ํŠธ๋ฆญ์ด ์ €์—๊ฒŒ ํšจ๊ณผ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ฐ‘์ž๊ธฐ ๊ฐ™์€ ๋ฌธ์ œ์— ์ง๋ฉดํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ค์ด๋Š” ์˜ค๋Š˜ ์•„์นจ๊นŒ์ง€ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž˜ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์— ๋ฌด์—‡์ด ๋ฌธ์ œ์ธ์ง€ ์ „ํ˜€ ๋ชจ๋ฅธ๋‹ค.

Ruby mine์„ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ์œผ๋กœ ํด๋ฆญํ•˜์—ฌ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•˜๊ณ  cucumber -r features/chatstep.feature ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ช…๋ น์ค„์—์„œ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค.

์•„๋ฌด๋‚˜ ๋„์™€์ฃผ์„ธ์š”

Given(/^I ์‹œ์ž‘ "([^"]*)"$/) do |arg1|
pending # ์œ„์˜ ๋ฌธ๊ตฌ๋ฅผ ๊ตฌ์ฒด์ ์ธ ๋™์ž‘์œผ๋กœ ๋ฐ”๊พธ๋Š” ์ฝ”๋“œ๋ฅผ ์—ฌ๊ธฐ์— ์ž‘์„ฑํ•˜์‹ญ์‹œ์˜ค.
๋

์ž‘๋™ํ•˜๋ ค๋ฉด 1.3.1๋กœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.
centos์—์„œ๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

2017๋…„ 1์›” 25์ผ 21์‹œ 32๋ถ„์— "Mrityunjeyan S" [email protected]์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ฐ‘์ž๊ธฐ ๊ฐ™์€ ๋ฌธ์ œ์— ์ง๋ฉดํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ค์ด๋Š” ๊ดœ์ฐฎ ์•˜์Šต๋‹ˆ๋‹ค.
์˜ค๋Š˜ ์•„์นจ๊นŒ์ง€ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋ญ๊ฐ€ ์ž˜๋ชป๋๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์–ด
๊ทธ๊ฒƒ์œผ๋กœ.

Ruby mine์„ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ์œผ๋กœ ํด๋ฆญํ•˜๊ณ  ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ช…๋ น์ค„์—์„œ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
์˜ค์ด -r features/chatstep.feature ๋ช…๋ น์„ ์‹คํ–‰ํ•ด๋„ ๋™์ผํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

์•„๋ฌด๋‚˜ ๋„์™€์ฃผ์„ธ์š”

โ€”
๋‹น์‹ ์ด ๋Œ“๊ธ€์„ ๋‹ฌ์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธ
https://github.com/cucumber/cucumber-js/issues/718#issuecomment-275224435 ,
๋˜๋Š” ์Šค๋ ˆ๋“œ ์Œ์†Œ๊ฑฐ
https://github.com/notifications/unsubscribe-auth/ALjDKMNdggk1Gh-x_q3KRuvlpN5f_0cOks5rV7E9gaJpZM4LhJZO
.

@jbgraug : ๋ฌด์—‡์„ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œํ–ˆ์Šต๋‹ˆ๊นŒ? ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ ์ „ Ur ์ด์ „ ๋ฒ„์ „์€ ๋ฌด์—‡์ด์—ˆ์Šต๋‹ˆ๊นŒ?

RC 2.0.6 ๋ฐ RC 2.0.0์œผ๋กœ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๋ฆฌ๋ˆ…์Šค์—์„œ ์ž‘๋™ํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์—†์—ˆ๊ฑฐ๋‚˜
์˜ค์ด๋กœ ์ฐฝ์€ ๋‹จ๊ณ„ ์ •์˜๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.
-r ์˜ต์…˜.

2017๋…„ 1์›” 26์ผ ๋ชฉ์š”์ผ ์˜ค์ „ 6:18 Mrityunjeyan S [email protected]
์ผ๋‹ค:

@jbgraug https://github.com/jbgraug : ๋ฌด์—‡์„ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ ํ–ˆ์Šต๋‹ˆ๊นŒ? ์šฐ๋ฅด๊ฐ€ ๋ญ์˜€๋”๋ผ
๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ ์ „ ์ด์ „ ๋ฒ„์ „

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธ
https://github.com/cucumber/cucumber-js/issues/718#issuecomment-275310070 ,
๋˜๋Š” ์Šค๋ ˆ๋“œ ์Œ์†Œ๊ฑฐ
https://github.com/notifications/unsubscribe-auth/ALjDKGbyYXvsjlLv-dlz6bnHMfPK7t05ks5rWCypgaJpZM4LhJZO
.

@jbgraug ์˜ค์ด๊ฐ€ ๋ฒ„์ „ 2.0์—์„œ ๋ฒˆ๋“ค๋กœ ์ œ๊ณต๋˜๋Š” gherkin ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™ ์Šต๋‹ˆ๊นŒ? ํ˜„์žฌ 1.3.14๋ฅผ ์„ค์น˜ ์ค‘์ด๋ฉฐ fetching gherkin ๋˜์–ด ์žˆ๋Š”๋ฐ 2.0 ์ด์ƒ ๋ฒ„์ „์„ ์„ค์น˜ํ•˜๋Š” ๋™์•ˆ ์ „ํ˜€ ๋ˆˆ์น˜์ฑ„์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ช…๋ น์ค„ ๋ฐ ํ…Œ์ŠคํŠธ ์Šค๋‹ˆํŽซ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ @reach2jeyan ์€ ์˜ค์ด-๋ฃจ๋น„ ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด ๋‘ ํ”„๋กœ์ ํŠธ๋Š” ๊ฐ๊ฐ์˜ ์–ธ์–ด์— ๋Œ€ํ•ด ์˜ค์ด ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๊ตฌํ˜„ํ•˜๋ ค๋Š” ์‹œ๋„์™€ ๊ด€๋ จ๋˜์–ด ์žˆ์ง€๋งŒ ๋งŽ์€ ์ฐจ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

@charlierudolph ์ฐธ์—ฌํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ  ์ง€๊ธˆ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค!

@charlierudolph @MartinDelille ๋งํ–ˆ๋‹ค ์ •ํ™•ํžˆ ํ†ตํ•ด ์ž˜ ์ž‘๋™ npm -S ์™€ ./node_modules/.bin/cucumber.js ,ํ•˜์ง€๋งŒ ํ†ตํ•ด npm -g ์™€ /usr/local/bin/cucumber.js , ๊ทธ๊ฒƒ์„ ๋ฐœ๊ฒฌํ•˜๊ณ  ๋‹จ๊ณ„๋ฅผ ์‹คํ–‰ํ•˜์ง€๋งŒ ๋‚˜์ค‘์— ์–ด๋–ป๊ฒŒ ๋“  ์žŠ์–ด ๋ฒ„๋ฆฝ๋‹ˆ๋‹ค.

macOS + Node.js 7.5.0 + Cucumber.js 2.0.0-rc.7
windows specific ๋ ˆ์ด๋ธ”์ด ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

@kozhevnikov ์—…๋ฐ์ดํŠธ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ๋ชจ๋“  ๋ณด๊ณ ์„œ๋Š” Windows์— ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค(๋กœ์ปฌ ์„ค์น˜๋กœ ๋กœ์ปฌ Mac์—์„œ ๋‹ค์‹œ ๋งŒ๋“ค ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค). ์ „์—ญ ์„ค์น˜๊ฐ€ ์–ด๋–ป๊ฒŒ ๋“  ๋‹ค๋ฅด๋‹ค๊ณ  ์ƒ์ƒํ•˜๊ธฐ ์–ด๋ ต์ง€๋งŒ ์ ์–ด๋„ ์ง€๊ธˆ์€ ์กฐ์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

cygwin์„ ํ†ตํ•ด ๋ช…๋ น ํ”„๋กฌํ”„ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Windows์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์–ด์ฉŒ๋ฉด ๊ทธ๊ฒŒ ๋ฌธ์ œ์ž…๋‹ˆ๊นŒ? ๋‚˜๋Š” ์‹ฌ์ง€์–ด ์˜ˆ์ œ์—์„œ ์ง์ ‘ ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ: ๊ฐ„๋‹จํ•œ ์ˆ˜ํ•™
์ˆ˜ํ•™์„ ํ•˜๋ ค๋ฉด
๊ฐœ๋ฐœ์ž๋กœ์„œ
๋ณ€์ˆ˜๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค

์‹œ๋‚˜๋ฆฌ์˜ค: ์‰ฌ์šด ์ˆ˜ํ•™
๋ณ€์ˆ˜๊ฐ€ 1๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ
๋ณ€์ˆ˜๋ฅผ 1์”ฉ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด
๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ณ€์ˆ˜์—๋Š” 2๊ฐ€ ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‹œ๋‚˜๋ฆฌ์˜ค ๊ฐœ์š”: ํ›จ์”ฌ ๋” ๋ณต์žกํ•œ ๊ฒƒ๋“ค
๋กœ ์„ค์ •๋œ ๋ณ€์ˆ˜๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ

Examples:
  | var | increment | result |
  | 100 |         5 |    105 |
  |  99 |      1234 |   1333 |
  |  12 |         5 |     18 |

Cucumber.defineSupportCode(ํ•จ์ˆ˜(์ปจํ…์ŠคํŠธ) {
var setWorldConstructor = context.setWorldConstructor;
var ์ฃผ์–ด์ง„ = context.Given
var When = context.When
var then = context.Then

///// ๋„ˆ์˜ ์„ธ์ƒ /////
//
// ์‚ฌ์šฉ์ž ์ •์˜ ์„ธ๊ณ„๋กœ 'setWorldConstructor'๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค(์„ ํƒ ์‚ฌํ•ญ).
//

var ์ปค์Šคํ…€์›”๋“œ = function() {};

CustomWorld.prototype.variable = 0;

CustomWorld.prototype.setTo = ํ•จ์ˆ˜(์ˆซ์ž) {
this.variable = parseInt(์ˆซ์ž);
};

CustomWorld.prototype.incrementBy = ํ•จ์ˆ˜(์ˆซ์ž) {
this.variable += parseInt(์ˆซ์ž);
};

setWorldConstructor(์ปค์Šคํ…€์›”๋“œ);

///// ๋‹จ๊ณ„ ์ •์˜ /////
//
// 'Given', 'When' ๋ฐ 'Then'์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹จ๊ณ„ ์ •์˜๋ฅผ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค.
//

์ฃผ์–ด์ง„(/^ ๋ณ€์ˆ˜๊ฐ€ (\d+)$/๋กœ ์„ค์ •๋จ, function(number) {
this.setTo(์ˆซ์ž);
});

When(/^I ๋ณ€์ˆ˜๋ฅผ (\d+)$/ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด function(number) {
this.incrementBy(์ˆซ์ž);
});

then(/^๋ณ€์ˆ˜๋Š” (\d+)$/, function(number) {
if (this.variable != parseInt(์ˆซ์ž))
throw new Error('๋ณ€์ˆ˜๋Š” ' + ์ˆซ์ž +
' ํ•˜์ง€๋งŒ ' + this.variable + '.'๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.);
});
})

์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. "ReferenceError: Given is not defined"
๋‚˜๋Š” ํŠน์ • ํŒŒ์ผ ์ด๋ฆ„์œผ๋กœ ์˜ค์ด.js ๋ฐ ~/node_modules/.bin/cucumber.js๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ํ•ญ์ƒ ์˜ค๋ฅ˜๋ฅผ ๋˜์ง‘๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ฌธ์ œ์—†์ด ๋ฃจ๋น„๋กœ ์˜ค์ด๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์˜ค์ด js๊ฐ€ ์ž‘๋™ํ•˜๋„๋ก ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค

๊ดœ์ฐฎ์€. ๋‚˜๋Š” ์ด๊ฒƒ์„ ์•Œ์•„ ๋ƒˆ๋‹ค๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค.

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

๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋กœ์ปฌ ์„ค์น˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚ด ๊ฒฝ๋กœ์— "./node_modules/.bin"์„ ์ถ”๊ฐ€ํ•˜์—ฌ Mac์—์„œ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

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

์ด๊ฒƒ์ด Windows์—์„œ ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์ „์—ญ ์„ค์น˜๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์–ธ๊ธ‰ํ•˜๊ธฐ ์œ„ํ•ด ์„ค๋ช…์„œ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

์ „์—ญ ์„ค์น˜ ์ œ๊ฑฐ์— ๋Œ€ํ•œ ๋‘ ๊ฐ€์ง€ ์‚ฌ์†Œํ•œ ์‚ฌํ•ญ:

  1. ๋ชจ๋“  ๋ฌธ์„œ๋Š” ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ ๊ณต์‹ ๋ฌธ์„œ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ทธ ์œ„์— ๊ตฌ์ถ•๋œ ๋‹ค๋ฅธ ๋งŽ์€ ์ธ๊ธฐ ์žˆ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋„ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์„ ๋งŒ๋‚ฌ์„ ๋•Œ ๋”ฐ๋ผ ๊ฐ€๊ณ  ์žˆ์—ˆ๊ณ  JavaScript/Node.js/Cucumber.js๋กœ ๋ง‰ ์‹œ์ž‘ํ•œ ์‚ฌ๋žŒ์„ ์œ„ํ•ด ๋””๋ฒ„๊ทธํ•˜๋Š” ๊ฒƒ์ด ์ขŒ์ ˆ์Šค๋Ÿฌ์› ์Šต๋‹ˆ๋‹ค.

  2. ๋งŽ์€ IDE์™€ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์ „์—ญ์„ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•˜๋“œ์ฝ”๋”ฉ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ macOS์—์„œ bash ํ”„๋กœํ•„ ์™ธ๋ถ€์— ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€(์ฆ‰, Spotlight๋ฅผ ํ†ตํ•ด WebStorm ์‹œ์ž‘)ํ•˜๋Š” ๊ฒƒ์€ ๋ณต์žกํ•˜๊ณ  ๋ฒ„์ „๋งˆ๋‹ค ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.

ํ . ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ์ปฌ ์˜ค์ด ์ธ์Šคํ„ด์Šค์˜ ์œ„์น˜๋ฅผ โ€‹โ€‹์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” CLI ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ธฐ๋ณธ๊ฐ’์€ process.cwd() + /node_modules/cucumber ๋กœ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ๋ฅผ ์ปค๋ฒ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@charlierudolph ์›๋ž˜ ์˜ค๋ฅ˜๋ฅผ ๋ณด๊ณ ํ•œ ํ›„ ํ…Œ์ŠคํŠธ์— ํ•„์š”ํ•œ ์ฝ”๋“œ๊ฐ€ Scala.js๋กœ ์ž‘์„ฑ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์–ด์จŒ๋“  Cucumber-JVM์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค์Œ์— Javascript๋ฅผ ํ…Œ์ŠคํŠธํ•ด์•ผ ํ•  ๋•Œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๊ตฌํ˜„ํ•˜๊ธฐ ์‰ฌ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ์ฐพ์•„์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

Node์—๋Š” ๋งŽ์€ ๊ฒฝ์šฐ ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ๊นŒ๋‹ค๋กœ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ตœ์†Œํ•œ ๋กœ์ปฌ ํŒจํ‚ค์ง€๋ฅผ ์ฐพ๊ฑฐ๋‚˜ ๋“œ๋ผ์ด๋ธŒ ๋ฃจํŠธ์— ๋„๋‹ฌํ•  ๋•Œ๊นŒ์ง€ ๋ถ€๋ชจ ๋ฅผ

@jeffmath @kozhevnikov ์—ฌ๊ธฐ์— ์ด์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๋œ ์ƒ๊ฐ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ์ปฌ ์˜ค์ด์— ๋Œ€ํ•œ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” cli ์˜ต์…˜์€ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ์ œ๊ณตํ•˜์ง€ ์•Š์œผ๋ฉด ์‹คํ–‰๋œ ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  2. ์ด ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฒ„์ „ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ๋กœ์ปฌ/๊ธ€๋กœ๋ฒŒ ์„ค์น˜๊ฐ€ ์ •ํ™•ํžˆ ๋™์ผํ•œ ๋ฒ„์ „์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฒ„์ „์„ ์ •๋ ฌํ•˜๋ผ๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
  3. ์ด ์˜ต์…˜์€ ์ฆ‰์‹œ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ ์ „์—ญ ์„ค์น˜ ์‚ฌ์šฉ์„ ์ค‘์ง€ํ•˜๊ณ  ๋Œ€์‹  ๋กœ์ปฌ ์„ค์น˜๋งŒ ์‚ฌ์šฉํ•˜๋ผ๋Š” ๊ฒฝ๊ณ ์™€ ํ•จ๊ป˜ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.
  4. ์ด ์˜ต์…˜์€ ๋‹ค์Œ ์ฃผ ๋ฒ„์ „์—์„œ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์ธ ํ…Œ์ŠคํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋™์•ˆ ๋น„์Šทํ•œ ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์•„์ด๋””์–ด๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ _roi-functional-tests_๋ผ๋Š” ๊ณตํ†ต ํ…Œ์ŠคํŠธ ํŒจํ‚ค์ง€๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€, ๋‚˜๋Š” _npm์˜ link_๊ณผ ํŒจํ‚ค์ง€๋ฅผ ์—ฐ๊ฒฐ ํ•œ ๋‹ค์Œ _roi - ๊ธฐ๋Šฅ - tests_,์ด ๊ฐ™์€์˜ ๊ธฐ๋Šฅ์„ ๊ฐ€๋ฆฌํ‚จ ์˜ค์ดํ•˜๋ ค๊ณ  :

./node_modules/.bin/cucumberjs ./node_modules/roi-functional-tests/features

๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ์ด๊ฒƒ์„ ์–ป๋Š”๋‹ค :

Warnings:

1) Scenario: Curl request - node_modules/roi-functional-tests/features/home.feature:3
   Step: Given I make curl request to "/" - node_modules/roi-functional-tests/features/home.feature:4
   Message:
     Undefined. Implement with the following snippet:

       Given('I make curl request to {arg1:stringInDoubleQuotes}', function (arg1, callback) {
         // Write code here that turns the phrase above into concrete actions
         callback(null, 'pending');
       });

์˜ค์ด๋Š” ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ ์™ธ๋ถ€์—์„œ ์ •์˜๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@jramcast ๋„ค. ๊ทธ๋Ÿฌ๋‚˜ --require cli ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฏธ --require ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

./node_modules/.bin/cucumberjs --require ./node_modules/roi-functional-tests/features ./node_modules/roi-functional-tests/features

๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค.

npm link ๋กœ ์ธํ•ด ์˜ค์ด๊ฐ€ ์ •์˜๋ฅผ ์ฐพ์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ทธ๋ž˜์„œ npm link ์—†์ด ๊ฐ™์€ ํ…Œ์ŠคํŠธ

./node_modules/.bin/cucumberjs ./node_modules/roi-functional-tests/features

๋‚ด ์ƒ๊ฐ์— ํŒจํ‚ค์ง€๋ฅผ ์—ฐ๊ฒฐํ•  ๋•Œ require ๋Š” ์—ฐ๊ฒฐ๋œ ํŒจํ‚ค์ง€ ๋””๋ ‰ํ† ๋ฆฌ( node_modules/roi-functional-tests/node_modules/cucumber ) ์•ˆ์— ์„ค์น˜๋œ ์˜ค์ด๋ฅผ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ _roi-functional-tests_๊ฐ€ ์„ค์น˜๋œ ๊ฒฝ์šฐ npm์€ ์ข…์†์„ฑ ํŠธ๋ฆฌ๋ฅผ ํ‰๋ฉดํ™”ํ•˜๊ณ  ํ”„๋กœ์ ํŠธ์˜ node_modules( node_modules/cucumber ) ๋ฐ”๋กœ ์•„๋ž˜์— ์„ค์น˜๋œ ์˜ค์ด ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ค์ด ๋ฒ„์ „: "์˜ค์ด": "^2.0.0-rc.9"
์œˆ๋„์šฐ ๋ฒ„์ „: 10
๋…ธ๋“œ ๋ฒ„์ „: 6.10.3 LTS ๋ฐ 7.10

IDE ๋˜๋Š” ์˜ค์ด์˜ ๊ธ€๋กœ๋ฒŒ ์ธ์Šคํ„ด์Šค์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌํ˜„๋˜์–ด๋„ ๋‹จ๊ณ„๋ฅผ ์ฐพ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ์˜ node_modules ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด์—์„œ cucumber.js๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋ˆ„๊ตฌ๋“ ์ง€ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ œ์•ˆ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ด๊ฒƒ์€ MacOS Sierra 10.12.4์—์„œ๋„ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
๋…ธ๋“œ ๋ฒ„์ „ 7.10

Cucumber ๋ฒ„์ „ 1.3.0์œผ๋กœ ๋Œ์•„๊ฐ€์„œ ์ด์ œ ์ „์—ญ ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ cmd๋ฅผ ํ†ตํ•ด ํ˜ธ์ถœํ•˜๊ณ  IDE์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” @charlierudolph ,
์ €๋Š” ๋‹ค์Œ ๋‹จ๊ณ„์— ์žˆ์Šต๋‹ˆ๋‹ค. (60ํ˜ธ์—์„œ ์—ฌ๊ธฐ๋กœ ์ด๋™)
๋กœ์ปฌ ์ธ์Šคํ„ด์Šค๋กœ๋งŒ ์‹คํ–‰ํ•˜์ง€๋งŒ ๊ธฐ๋Šฅ ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๋Š” ๋™์•ˆ ๋‹จ๊ณ„ ์ •์˜๊ฐ€ ์ธ์‹๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
image
๊ธฐ๋Šฅ ํŒŒ์ผ ๋ฐ ๋‹จ๊ณ„ ์ •์˜ ํŒŒ์ผ์ด ์˜ฌ๋ฐ”๋ฅธ ์œ„์น˜์— ์žˆ์Šต๋‹ˆ๋‹ค(์Šคํฌ๋ฆฐ์ƒท ์ฒจ๋ถ€).
๋‚ด ๋‹จ๊ณ„ ์ •์˜๊ฐ€ ์‹๋ณ„๋˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

package-lock.json์˜ 1.X ๋ฒ„์ „์— ๋Œ€ํ•œ Cucumber ์ฐธ์กฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
"wdio-cucumber-framework":

    "cucumber": {
      "version": "1.3.3",
      "resolved": "https://registry.npmjs.org/cucumber/-/cucumber-1.3.3.tgz",
      "integrity": "sha1-Za+2Xy+T9y2teN8qterPFGCf7C8=",
      "dev": true
    },

"webdriverio-cucumber-js":  

   "cucumber": {
      "version": "1.2.2",
      "resolved": "https://registry.npmjs.org/cucumber/-/cucumber-1.2.2.tgz",
      "integrity": "sha1-KEZJEf8arfwOZjTXY2q69mHGaJI="
    },

๋‘ ๋ฒ„์ „์„ 2,3,1๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.
๋‚ด ๋…ธ๋“œ ๋ฒ„์ „์€ 8.0.0์ž…๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ์—ฌ์ „ํžˆ ๋‹จ๊ณ„ ์ •์˜๊ฐ€ ์ธ์‹๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์–ด๋–ค ์•„์ด๋””์–ด๋ผ๋„?

@vvedachalam

๋…๋ฆฝ ์‹คํ–‰ํ˜• ๋ชจ๋“œ๊ฐ€ ์•„๋‹Œ ํ…Œ์ŠคํŠธ ๋Ÿฌ๋„ˆ์™€ ํ•จ๊ป˜ webdriverIO๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ํ…Œ์ŠคํŠธ ๋Ÿฌ๋„ˆ๊ฐ€ ์ƒˆ ๋ฒ„์ „์„ ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— 2.x๊ฐ€ ์•„๋‹Œ 1.3.3์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•ฉ๋‹ˆ๋‹ค. ๋‹จ๊ณ„ ์ •์˜๊ฐ€ ๊ตฌํ˜„๋˜๋Š” ์ƒˆ๋กœ์šด ๋ฐฉ๋ฒ•.

ํŽ˜์ด์ง€ ๊ฐœ์ฒด ๋ชจ๋ธ์— ํ•„์š”ํ•œ ํ…Œ์ŠคํŠธ ๋Ÿฌ๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋ชจ๋“  ๋ช…๋ น์ด ๋™๊ธฐ์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š”์ง€ ํ™•์ธํ•˜๋ฉด์„œ ์ด์ „ [email protected] ์œผ๋กœ ๋Œ์•„๊ฐ”์Šต๋‹ˆ๋‹ค.

@GeeChao
๋‹ต์žฅ์„ ๋ณด๋‚ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋˜๋Œ๋ฆฌ๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ–ˆ๋Š”๋ฐ ์—ฌ์ „ํžˆ ๋‹จ๊ณ„ ์ •์˜๊ฐ€ ์ธ์‹๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

-r ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ช…๋ น์„ ์‹œ๋„ํ•˜๋ฉด ๊ธฐ๋Šฅ ํŒŒ์ผ์— ๊ตฌ๋ฌธ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค...
C:/webdriverio-test/node_modules/.bin/cucumber-js -r features/customer-validation.feature

C:\webdriverio-testfeatures\customer-validation. ๊ธฐ๋Šฅ:2
์†Œ์œ ์ž๋กœ์„œ
^^

๊ตฌ๋ฌธ ์—๋Ÿฌ : ์˜ˆ๊ธฐ์น˜ ์•Š์€ ์‹๋ณ„์ž
createScript์—์„œ(vm.js:74:10)
Object.runInThisContext์—์„œ(vm.js:116:10)
Module._compile์—์„œ (module.js:533:28)
Object.Module._extensions..js์—์„œ (module.js:580:10)
Module.load์—์„œ (module.js:503:32)
tryModuleLoad์—์„œ(module.js:466:12)
Function.Module._load์—์„œ (module.js:458:3)
Module.require์—์„œ (module.js:513:17)
ํ•„์š” ์‹œ(internal/module.js:11:18)
C:\webdriverio-test\node_modules\cucumberlib\cliindex.js:135:16์—์„œ
Array.forEach์—์„œ(๋„ค์ดํ‹ฐ๋ธŒ)
Cli.getSupportCodeLibrary์—์„œ (C:\webdriverio-test\node_modules\cucumberlib\cliindex.js:134:24)
ํด๋ฆฌ์—์„œ.(C:\webdriverio-test\node_modules\cucumberlib\cliindex.js:144:39)
Generator.next์—์„œ ()
Generator.tryCatcher์—์„œ (C:\webdriverio-test\node_modules\bluebird\js\release\util.js:16:23)
PromiseSpawn._promiseFulfilled(C:\webdriverio-test\node_modules\bluebird\js\release\generators.js:97:49)

@vvedachalam ๋ณต์ œํ•  ์ˆ˜ ์žˆ๋„๋ก ์ด๊ฒƒ์„ ์ƒ์„ฑํ•˜์—ฌ ์ €์žฅ์†Œ์— ํ‘ธ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@GeeChao
ํ•œ๋ฒˆ ๋ด์ฃผ์„ธ์š”
https://github.com/vvedachalam/Ruffer-Test

@vvedachalam

๊ธฐ๋Šฅ ํด๋” ๋‚ด์—์„œ step_definitions ํด๋”๋ฅผ ์ด๋™ํ•˜๋ฉด ์ž‘์—…์ด ์‹œ์ž‘๋˜๊ณ  ๋‹จ๊ณ„ ์ •์˜๊ฐ€ ์ธ์‹๋ฉ๋‹ˆ๋‹ค. txtdetails.txt ํŒŒ์ผ ์œ„์น˜๊ฐ€ ์ž˜๋ชป๋œ ํ›„์— ๋ฐœ์ƒํ•˜๋Š” ์œ ์ผํ•œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

@GeeChao
์•„, sry ๊ทธ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ‘ธ์‹œํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
์œ„์˜ ์Šคํฌ๋ฆฐ์ƒท์„ ๋ณด๋ฉด ๋‹จ๊ณ„ ์ •์˜๊ฐ€ ๊ธฐ๋Šฅ ํด๋”์—๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค.
ํฌ๋ง ๋‚ด์šฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๋‚ด์šฉ = fs.readFileSync('../../txndetails.txt', 'utf8');

๊ทธ๋ ‡๋‹ค๋ฉด ์™œ ๋‚ด ๋กœ์ปฌ์˜ ๊ธฐ๋Šฅ ํŒŒ์ผ์— ๋‹จ๊ณ„ ์ •์˜๋ฅผ ๋ถ™์ผ ์ˆ˜ ์—†์Šต๋‹ˆ๊นŒ?
๋‚ด ์„ค์ •์ด ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

@vvedachalam

๊ทธ๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ํ•œ ์œ ์ผํ•œ ์ผ์€ ๊ธฐ๋Šฅ ๋””๋ ‰ํ† ๋ฆฌ ์•„๋ž˜๋กœ step_definitions๋ฅผ ์ด๋™ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ npm install [email protected] --save-dev๋ฅผ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ node_modules/cucumber/bin/cucumber.js features/๋ฅผ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

@GeeChao ๋ชจ๋‘ ์ž˜ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ๋งŒ๋“  then ๋ฌธ ์•ˆ์— For ๋ฃจํ”„๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹จ๊ณ„ ์ •์˜ ๋‚ด์—์„œ For ๋ฃจํ”„๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
ํ…์ŠคํŠธ ํŒŒ์ผ ๋ฐ์ดํ„ฐ(๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ ํ…Œ์ŠคํŠธ)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์˜ˆ์ œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์ด ์งˆ๋ฌธ์ด ์ด ์ฃผ์ œ์™€ ๊ด€๋ จ์ด ์—†๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ๋„์›€์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์„์ง€ ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

@GeeChao Ok, ๋‹ค์‹œ ๋‚ด ์–ด๋ฆฌ์„์€ ์‹ค์ˆ˜์ž…๋‹ˆ๋‹ค. ๋ฃจํ•‘ ๋ณ€์ˆ˜๊ฐ€ ์ œ๋Œ€๋กœ ์„ค์ •๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค(๊ธธ์ด ๋น„๊ต๋ฅผ ์žŠ์—ˆ์Šต๋‹ˆ๋‹ค). ๊ท€ํ•˜์˜ ์ง€์›์— ๋‹ค์‹œ ํ•œ ๋ฒˆ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค

๋‚˜์—๊ฒŒ ์ดˆ๋ณด์ž๋กœ์„œ ์˜ค๋ฅ˜๋Š” ์ •๊ทœ ํ‘œํ˜„์‹์ด ์•„๋‹Œ ๋ฌธ์ž์—ด์„ ๋‹จ๊ณ„์— ์ „๋‹ฌํ•˜์—ฌ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

Then('I log in as (.*)', ...)

๋ณด๋‹ค๋Š”

Then(/I log in as (.*)', ...)

๊ฐ„๋‹จํ•œ ์‹ค์ˆ˜์ง€๋งŒ ์ด์ œ ๋ง‰ ์‹œ์ž‘ํ•˜๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ ์œ ์šฉํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@vvedachalam ์ •๋ฆฌ ํ•˜์…จ๋‚˜์š”? ๋„์™€์ฃผ์‹œ๊ฒ ์–ด์š”?

@sancy2017 WDIO ์—์„œ TestCafe ๋„๊ตฌ๋กœ ์˜ฎ๊ฒผ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฐ”๋กœ ํ•ด๊ฒฐ์ฑ…์„ ๋ง์”€๋“œ๋ฆฌ์ง€ ๋ชปํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ์ง๋ฉดํ•˜๊ณ  ์žˆ๋Š” ๋ฌธ์ œ๊ฐ€ ์ •ํ™•ํžˆ ๋ฌด์—‡์ธ์ง€ ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค

์ด ์˜ค๋ฅ˜์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ํ•ด๊ฒฐ์ฑ…์€ npm install [email protected] --save-dev์ž…๋‹ˆ๋‹ค.
๊ทธ๋Ÿฐ ๋‹ค์Œ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค. ..npm ํ…Œ์ŠคํŠธ

"์˜ค์ด ๋‹จ๊ณ„ ์ •์˜๊ฐ€ ์ธ์‹๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค"๋ผ๋Š” ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋””๋ ‰ํ† ๋ฆฌ ์ด๋ฆ„์„ "steps"์—์„œ "step_definitions"๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ํšจ๊ณผ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์ด ๊ธฐ๋Šฅ ๋””๋ ‰ํ† ๋ฆฌ ์•„๋ž˜์— step_definitions๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์€ ๊ธฐ๋Šฅ ๋””๋ ‰ํ† ๋ฆฌ ์•„๋ž˜์— ๋‹จ๊ณ„๋ฅผ ์œ ์ง€ํ•˜๋Š” ๋Œ€์‹  src/step_definitions์™€ ๊ฐ™์€ ๋ณ„๋„์˜ ๋””๋ ‰ํ† ๋ฆฌ์— ๋‹จ๊ณ„๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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