[kr-dev] Cucumber and Javascript #로그인 시나리오 작성

in kr-dev •  7 years ago 



C u c u m b e r
:: #로그인 시나리오 작성 ::

오늘은 로그인에 대해 시나리오를 짜볼까 해요.
먼저 feature/로그인.js 파일을 만듭니다.

// feature/로그인.js
기능: 부릉 로그인
  올바른 부릉 아이디와 비밀번호를 입력하면 로그인에 성공한다
  부릉 아이디와 비밀번호가 올바르지 않다면 로그인에 실패한다

  시나리오 개요: 부릉 아이디로 로그인을 성공한다
    조건 <아이디> / <비밀번호> 계정으로 부릉에 로그인하면
    그러면 부릉 로그인이 성공한다
    
    예:
      |아이디|비밀번호|
      |meshkorea|12345678|
        |admin|12345678|

  시나리오: 부릉 아이디로 로그인을 실패한다
    조건 meshkorea / wrong-password 계정으로 부릉에 로그인하면
    그러면 부릉 로그인이 실패한다

로그인의 성공과 실패의 시나리오를 써봤어요.
로그인 성공은 시나리오 개요(Scenario Output)을 통해 예문의 2개 예시를 활용할 거고요, 실패는 그냥 문자열을 바로 넣어 처리하겠습니다.

그리고 cucumber를 실행해봅니다

$ yarn cucumber.js --language ko features/로그인.feature

그러면 오류가 발생합니다.

UUUUUU

Warnings:

1) Scenario: 부릉 아이디로 로그인을 성공한다 # tasks/vroong/features/로그인.feature:11
   ? 조건meshkorea / 123456789 계정으로 부릉에 로그인하면
       Undefined. Implement with the following snippet:

         Given('meshkorea / {int} 계정으로 부릉에 로그인하면', function (int, callback) {
           // Write code here that turns the phrase above into concrete actions
           callback(null, 'pending');
         });

   ? 그러면부릉 로그인이 성공한다
       Undefined. Implement with the following snippet:

         Then('부릉 로그인이 성공한다', function (callback) {
           // Write code here that turns the phrase above into concrete actions
           callback(null, 'pending');
         });


2) Scenario: 부릉 아이디로 로그인을 성공한다 # tasks/vroong/features/로그인.feature:12
   ? 조건admin / 123456789 계정으로 부릉에 로그인하면
       Undefined. Implement with the following snippet:

         Given('admin / {int} 계정으로 부릉에 로그인하면', function (callback) {
           // Write code here that turns the phrase above into concrete actions
           callback(null, 'pending');
         });

   ? 그러면부릉 로그인이 성공한다
       Undefined. Implement with the following snippet:

         Then('부릉 로그인이 성공한다', function (callback) {
           // Write code here that turns the phrase above into concrete actions
           callback(null, 'pending');
         });


3) Scenario: 부릉 아이디로 로그인을 실패한다 # tasks/vroong/features/로그인.feature:14
   ? 조건meshkorea / wrong-password 계정으로 부릉에 로그인하면
       Undefined. Implement with the following snippet:

         Given('meshkorea / wrong-password 계정으로 부릉에 로그인하면', function (callback) {
           // Write code here that turns the phrase above into concrete actions
           callback(null, 'pending');
         });

   ? 그러면부릉 로그인이 실패한다
       Undefined. Implement with the following snippet:

         Then('부릉 로그인이 실패한다', function (callback) {
           // Write code here that turns the phrase above into concrete actions
           callback(null, 'pending');
         });


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

오류를 해결하기 위해 steps/login.steps.js를 작성합니다.

const { defineSupportCode } = require("cucumber");
const { expect } = require("chai");
const api = require("../api");

defineSupportCode(function({ Given, Then, When }) {
  Given(/^(.+) \/ (.+) 계정으로 부릉에 로그인하면$/, function(
    username,
    password,
    callback
  ) {
    api
      .login({ grant_type: "password", username: username, password: password })
      .then(res => {
        this.vroongToken = res.access_token;
        callback();
      })
      .catch(error => {
        this.vroongToken = null;
        callback();
      });
  });

  Then("부릉 로그인이 성공한다", function(callback) {
    expect(this.vroongToken).to.be.not.null;
    callback();
  });

  Then("부릉 로그인이 실패한다", function(callback) {
    expect(this.vroongToken).to.be.null;
    callback();
  });
});

Api는 어디서 나왔을까요?
api.js 를 생성해서 아래와 같이 작성해줍니다.

const hostname = "https://localhost:8000";
const request = require("superagent");

module.exports = {
  login: function(account) {
    return request
      .post(`${hostname}/login`)
      .set("Authorization", "Basic STRING")
      .set("Content-Type", "application/x-www-form-urlencoded")
      .send(account)
      .then(res => res.body);
  }
};

그리고 다시 cucumber를 실행하면

......

3 scenarios (3 passed)
6 steps (6 passed)

시나리오대로 테스트가 끝났습니다.


지난포스트

kr-dev Cucumber and Javascript #introduce — Steemit

#development #cucumber

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

Congratulations @clarekang! You have completed some achievement on Steemit and have been rewarded with new badge(s) :

Award for the number of upvotes

Click on any badge to view your Board of Honor.

To support your work, I also upvoted your post!
For more information about SteemitBoard, click here

If you no longer want to receive notifications, reply to this comment with the word STOP

Do not miss the last announcement from @steemitboard!

Do you like SteemitBoard's project? Vote for its witness and get one more award!