Cucumber-js: ๋‚ด ๊ธฐ๋Šฅ ์‹œ๋‚˜๋ฆฌ์˜ค Cucumber.js์—์„œ ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์— ๋งŒ๋“  2015๋…„ 12์›” 08์ผ  ยท  5์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: cucumber/cucumber-js

์•ˆ๋…•,

๋‚ด ๊ธฐ๋Šฅ์„ ํ˜ธ์ถœํ•˜๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์–ด๋–ป๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚ด ๊ธฐ๋Šฅ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์‹ค์ œ๋กœ ํ•œ ๊ฐ€์ง€ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

Feature: create module feature
  As a admin
  I want to use create module

  <strong i="8">@createModule</strong>
  Given I am logged as 'ADMIN'
    And I am on "/admin/create"
   Then The "book_id" field should be empty

๋‚ด ๊ธฐ๋Šฅ์—์„œ ๋‚ด ํƒœ๊ทธ @createModule ์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

this.Then(/^The "?([^"]*)"? field should be empty$/, function (el) {

    if (myModule === @createModule) {
        ...
    } else if {
        ...
    }

    return main_po.checkIsEmptyElement(this, el);
});

ํ˜ธ์ถœ๋˜๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•ด @createModule ํƒœ๊ทธ๋ฅผ ๋ฐ›๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋˜๋Š” ๋‹ค๋ฅธ ๋Œ€์•ˆ์œผ๋กœ ์–ด๋–ค ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ๋‚ด ๊ธฐ๋Šฅ์„ ํ˜ธ์ถœํ•˜๋Š”์ง€ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

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

ํ•ด๊ฒฐ :

๋‚˜๋Š” ์ถ”๊ฐ€ํ–ˆ๋‹ค :

this.Before(function (scenario, callback) {
    var tags = scenario.getTags();

    this.current_module = tags[0].getName();

    callback();
});

๊ทธ๋ฆฌ๊ณ  ๋‚ด ๊ธฐ๋Šฅ :

this.Then(/^The "?([^"]*)"? field should be empty$/, function (el) {

    if (this.current_module === @createModule) {
        ...
    } else if {
        ...
    }

    return main_po.checkIsEmptyElement(this, el);
});

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

ํƒœ๊ทธ๋Š” ์˜ค์ด-js๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์‹คํ–‰ํ•  ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์„ ํƒํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค(README ์ฐธ์กฐ). ํ˜„์žฌ ๋‹จ๊ณ„์—๋Š” ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค. ์‹œ๋‚˜๋ฆฌ์˜ค ์•„๋ž˜์˜ ๋ชจ๋“  ๋‹จ๊ณ„๋Š” ์„ธ๊ณ„ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค(๋‹จ๊ณ„ ์ •์˜์—์„œ this ๋ฅผ ํ†ตํ•ด ์•ก์„ธ์Šค).

ํ•ด๊ฒฐ :

๋‚˜๋Š” ์ถ”๊ฐ€ํ–ˆ๋‹ค :

this.Before(function (scenario, callback) {
    var tags = scenario.getTags();

    this.current_module = tags[0].getName();

    callback();
});

๊ทธ๋ฆฌ๊ณ  ๋‚ด ๊ธฐ๋Šฅ :

this.Then(/^The "?([^"]*)"? field should be empty$/, function (el) {

    if (this.current_module === @createModule) {
        ...
    } else if {
        ...
    }

    return main_po.checkIsEmptyElement(this, el);
});

@jechazelle ์†”๋ฃจ์…˜์„ ๊ฒŒ์‹œํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋Œ€ํ•ด ๋™์ผํ•œ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. :)

์˜ค์ด-js 3.2.1์—์„œ ์‚ฌ์šฉ

Before({timeout: 20000}, async function(testCase) {
  this.tags = testCase.pickle.tags.map((tag) => tag.name);`
  ...
}

๋‚ด๊ฐ€ ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ํŠน์ • ๋‹จ๊ณ„ ๊ตฌํ˜„์ด ์•Œ๋ ค์ง„ ์‹œ๋‚˜๋ฆฌ์˜ค ํ•˜์œ„ ์ง‘ํ•ฉ์— ๋Œ€ํ•ด ์‹คํŒจํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ถ”์  ์‹œ์Šคํ…œ์—์„œ ์ค‘์š”ํ•˜์ง€ ์•Š์€ ๊ฒฐํ•จ ํ‹ฐ์ผ“์„ ๋งŒ๋“ค๊ณ  ์‹คํŒจํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค์— ํ‹ฐ์ผ“# ํƒœ๊ทธ๋ฅผ ์ง€์ •ํ•œ ๋‹ค์Œ ๋…ผ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. this.tags์— ํ‹ฐ์ผ“ ๋ฒˆํ˜ธ๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ ๋‹จ๊ณ„ ๊ตฌํ˜„์—์„œ '๋ณด๋ฅ˜ ์ค‘'์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ํ†ตํ•ด ๋นŒ๋“œ๋ฅผ ๋…น์ƒ‰์œผ๋กœ ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ฒฐํ•จ์„ ์ˆ˜์ •ํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ถŒํ•œ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์Šค๋ ˆ๋“œ๋Š” ๋‹ซํžŒ ํ›„ ์ตœ๊ทผ ํ™œ๋™์ด ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž๋™์œผ๋กœ ์ž ๊ฒผ์Šต๋‹ˆ๋‹ค. ๊ด€๋ จ ๋ฒ„๊ทธ์— ๋Œ€ํ•œ ์ƒˆ ๋ฌธ์ œ๋ฅผ ์—ฌ์‹ญ์‹œ์˜ค.

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