[kr-dev] Cucumber and Javascript #TypeScript

in kr-dev •  6 years ago 



C u c u m b e r
:: #typescript ::

TypeScript를 적용해서 타입 체킹을 용이하게 하자는 내부의 의견을 수렴해 cucumber에 TypeScript를 적용하게 되었습니다.

Repo: https://github.com/ClareKang/agile-testing
소스는 레포에서 참고 부탁드려요.

지난 소스는 cucumber v3을 사용했는데 이번에 typescript를 적용하면서 버전을 v4로 업데이트 진행했습니다.

// package.json
"dependencies": {
  "chai": "^4.1.2",
  "cucumber": "^4.2.1",
  "papaparse": "^4.5.0",
  "superagent": "^3.8.3",
  "ts-node": "^6.1.0",
  "typescript": "^2.9.1"
  "@types/chai": "^4.1.3",
  "@types/cucumber": "^4.0.4",
  "@types/node": "^10.3.1",
  "@types/papaparse": "^4.1.34",
  "@types/superagent": "^3.8.0",
  "eslint": "^4.19.1",
  "tslint": "^5.10.0",
  "tslint-no-unused-expression-chai": "^0.1.3"
}

현재 사용 중인 package들 입니다.

v4에 맞춰 스크립트도 변경했습니다

"test": "./node_modules/.bin/cucumber-js -r tasks/vroong/steps/*.steps.ts --require-module ts-node/register"

.features파일은 그대로 사용할 거라 수정할 필요가 없습니다.

// login.steps.ts
import { expect } from "chai";
import { Given, Then } from "cucumber";
import Api from "../common";

Given(/^(.+) \/ (.+) 계정으로 로그인하면$/, function(
  username: string,
  password: string,
  callback: any,
) {
  const api = new Api();
  api
    .login({ username, password })
    .then((res: any) => {
      this.token = res.access_token;
      callback();
    })
    .catch(() => {
      this.token = null;
      callback();
    });
});

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

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

현재 타입을 다 any로 넣어두긴 했지만 사실 나중에 명세를 정확하게 써야합니다.

이번에 world의 this.token을 domain 레벨로 넘기려고 했지만 여러모로 실패해서 그 작업은 다음에 올리도록 하겠습니다.


지난포스트

kr-dev Cucumber and Javascript #introduce — Steemit
kr-dev Cucumber and Javascript #로그인 시나리오 작성 — Steemit

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!