ケンヤ・ミサキのプログラミング日記

Ruby, Pythonなどのプログラミング日記です

Turnipについて&Turnipの設定

前提

Turnipとは何か?

あまり情報がないので僕自身もよくわかっていないのですが、Trunipというのは、Gehrkin記法という独特の記法で記載されるプログラムのことをさしています。僕の環境では、Capybaraと一緒に使うことを前提としています。

Gehrkin記法とは、特に、スクラム開発の現場などにおいて、stakeholdersをうまく巻き込むために、自然言語に近い記法でプログラムのシナリオを記載し(featureファイル)、それを、stepファイルというRuby/Rspecで書かれたプログラムに落とし込んで、Acceptance Testを実行する、というような枠組みです。

顧客やユーザーに見せるシナリオはfeatureファイルの方で、それをサポートするようにstepファイルをコーディングしていきます。

今回、僕は、とある特許系のDBのスクレイピングを自動化する目的で、RSpecを利用するので、割と特殊な用途で使うのですが、本来の目的は、自社開発Webアプリなどの受け入れテスト(Acceptance Test)の自動化・効率化で、要は、クライアントの求めるシナリオに沿ったテストスクリプトを書いておき、それを自動で効率的に実行することです。

これを、一般に、ATDD; Acceptance Test Driven Developmentなどと呼称しています。

Turnip(英語でかぶという意味)の兄弟の中にはCucumber(きゅうり)やSpinach(ほうれん草)などもありますが、現状で、一番使われているのはTurnipのよう。

ちなみに、Gehrkinもきゅうりの一種ですが、英語圏では同じきゅうりと言っても種類によっていろんな呼び名があるみたいですね!

Ruby/RSpec(非rails)でのTurnipの設定

Turnipの設定についてのWebサイトの記載は、主にrails環境のものも多いのですが、今回は非railsでの話をしたいと思います。

参考にしたサイトはこちら

Turnipのインストール

Gemfileに

gem "turnip"

を追記して、bundle install

Turnipの設定初期化

Rspecではspec_helper.rbというファイルが作られているのですが、これとは別途、turnip_helper.rbというファイルを作らないといけません。なので、以下のコマンドを実行。

touch spec/turnip_helper.rb

このファイルを編集して、以下の記載を追加する

require 'spec_helper.rb'
Dir.glob("spec/steps/**/*step.rb"){ |f| load f, true }

Dirで始まる一文は、インストール時に参照するstepファイルのファイル名条件と保存場所を示していて、フォルダ構造に沿って記載する必要があります。上記の例であれば、specフォルダ中stepsフォルダに格納されている任意のファイル、またはその下のフォルダ中の任意のファイルで、step.rbで終わるファイルを参照せよ、という指令ですね。

.rspecファイルへの追記

.rspecファイルは隠しファイルなので、これを表示させた上で編集します。.rspecファイルに以下の一文を追記。

-r turnip/rspec

これは、Rspecコマンド実行の際の条件を規定しているみたいなのですが、あまりよくわかっておらず、単なるおまじない的な立ち位置です。

featureファイルとstepファイルを作成する

テスト用で以下のように作成します。

test.feature

Feature: Web自動化
Scenario: J-PlatPatアクセス
Given J-PlatPatにアクセスする
When クリックする
Then 出力する

 

steps/step.rb

step "J-PlatPatにアクセスする" do
puts "サイトにアクセスした"
end

step "クリックする" do
puts "クリックした"
end

step "出力する" do
puts "出力した"
end

この状態で、以下のコマンドを実行

bundle exec rspec

以下の出力が得られた。

サイトにアクセスした

クリックした

出力した

今回はputsメソッドしか使っていないので、コンソールへの出力のみですが、今後、設定を進めることにより、Webブラウザを自動操作できるようになります!