# ビヘイビア駆動開発

# ビヘイビア駆動開発(BDD)とは?

ビヘイビア駆動開発(BDD)は、テスト駆動開発(TDD)をベースとした開発手法です。
BDDでは、技術チームと非技術チーム間のコミュニケーションを促進するために、共通言語が開発されました。
テストは関係者が誰でも理解できる共通言語(例:英語)で記述されます。
BDDの詳細については、 こちら を参照してください。

# GondolaでBDDを使う

GondolaにてBDDを使うには、フィーチャーファイルとステップ定義ファイルが必要です。

# フィーチャー

フィーチャーファイルは、Gherkinで記述され、これらはプロジェクトのルートフォルダ配下にあるsrc/featuresフォルダに格納されます。
フォルダが存在していない場合には、作成する必要があります。また、以下の記述をgondola.jsonに追加する必要があります。

  "gherkin": {
      "features": "./features/**/*.feature"
    }

フィーチャーファイルのサンプルは以下の通りです。

Feature: Car Reservation
    Car Reservation Feature

Scenario: Common Reservation
    Given I am logged in as "john"
    When I rent a "Ford Mustang Coupe" for 2 day
    And I select option "N/A"
    Then I should see the total payment is 310.00

Scenario: Reservation with Infant Seat
    Given I am logged in as "john"
    When I rent a "Toyota Prius" for 1 day
    And I select option "Infant Seat"
    Then I should see the total payment is 140.40

# ステップ定義

ステップ定義ファイルは、フィーチャーファイルの Given-When-Then 記述をテスト関数にマップするためのtypescriptファイルです。
これらは、src/step_definitions フォルダに格納されます。
フォルダが存在しない場合は、フォルダの作成が必要です。
より詳細なステップ記述については、 こちら を参照してください。 また、ステップ定義ファイルは gondola.json に記述しておく必要があります。

"gherkin": {
      "features": "./features/**/*.feature",
      "steps": [
        "./built/step_definitions/loginSteps.js",
        "./built/step_definitions/reservationSteps.js"
      ]
    }

以下はステップ定義ファイルのサンプルです。

import {gondola} from "@logigear/gondola";
import loginPage from "../pages/loginPage";
import * as users from "../../data/users.json";
import * as carReservations from "../../data/carReservations.json";
import homePage from "../pages/homePage";
import orderPage from "../pages/orderPage";

Given("I am logged in as {string}", async (userName: string) => {
    const user = users.default[userName];
    if (user) {
        await loginPage.login(userName, user.password);
    } else {
        throw new Error(`Test data doesn't contain user '${userName}'`);
    }
});

When("I rent a {string} for {int} day", async(carName: string, rentedDays: number) => {
    await homePage.openNewOrder();
    await orderPage.enterPickUpInfo(
                carReservations.default.default.location.pickup);
    await orderPage.enterReturnInfo(
                carReservations.default.default.location.return);
    await orderPage.selectCar(carName);
    await orderPage.setRentedDays(rentedDays);
    await orderPage.enterCustomerInfo(
                carReservations.default.default.customer.firstName,
                carReservations.default.default.customer.lastName,);
});

When("I select option {string}", async(option: string) => {
    await orderPage.selectOptions(option);
    await orderPage.selectPrice();
});

Then("I should see the total payment is {float}", async(price: number) => {
    await orderPage.checkTotalPrice(price.toFixed(2));
});

# データファイル

BDDでの自動テストを行うには、ヘッダにてステップ定義ファイルのインポートが必要です。

import * as users from "../../data/users.json";

これらのファイルは、プロジェクトルートのdataフォルダに格納されています。
フォルダが存在しない場合は、作成する必要があります。 以下はデータファイルのサンプルです。

{
    "john":{
        "firstName":"john",
        "lastName":"doe",
        "password":"",
        "driverLicense":"CA123456"
    },
    "invalid":{
        "password":"invalid"
    }
}
最終更新: 2020/12/28 4:12:58