質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Capybara

Capybaraは、 Rubyで開発されているWebアプリケーションテストフレームワークです。Webブラウザ不要でブラウザ上のユーザー操作及びJavaScriptの挙動を自動化することができます。

Turnip

Turnipは、RSpec向けGherkin拡張ライブラリ。フォーム入力やボタンのクリックなどの操作を自然言語風のDSLで記述し自動テストを実現するRuby製ツールです。

Gherkin

Gherkinは、テストツールであるCucumberのフィーチャ文法です。Cucumber自体はRubyで書かれていますが、Gerhkinのフォーマットでシナリオ試験や仕様を自然言語により定義します。

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

0回答

433閲覧

Railsアプリの統合テストをGherkin記法のTurnipでやるべきか、否かについてご意見ください

napoano365

総合スコア28

Capybara

Capybaraは、 Rubyで開発されているWebアプリケーションテストフレームワークです。Webブラウザ不要でブラウザ上のユーザー操作及びJavaScriptの挙動を自動化することができます。

Turnip

Turnipは、RSpec向けGherkin拡張ライブラリ。フォーム入力やボタンのクリックなどの操作を自然言語風のDSLで記述し自動テストを実現するRuby製ツールです。

Gherkin

Gherkinは、テストツールであるCucumberのフィーチャ文法です。Cucumber自体はRubyで書かれていますが、Gerhkinのフォーマットでシナリオ試験や仕様を自然言語により定義します。

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2020/05/21 13:28

編集2020/05/26 09:20

#ご意見いただきたいこと
Railsアプリの統合テストを書いていくにあたり、Capybaraのコードだけでやるか、Gherkin記法で(日本語ベースで)Turnipでやるか、という選択肢があるのですが、Gherkin記法については以下のような懸念点があり、、、、経験有無問わず、エンジニアの皆さまだとどう感じるか、考えるか、ご意見頂けないでしょうか。

#Gherkin記法とは

GherkinとはCucumberやTurnipで採用されているテスト記述言語フォーマットのこと。
自然言語で書ける。英語でも日本語でもOK。テスト仕様部分とロジック部分をfeatureとstepで分離しており、何がテストされているか分かり易い、と言われている。
どのようなテストをしているかを知りたい場合はfeatureファイルを参照するのみ、Rubyの知識は要らないといったメリットがあります。

疑問その1

「Gherkin記法を使うと、テストで何をしているかわかりやすい」の前提には、開発メンバーが必要十分な日本語表現で、テスト内容を描き表せること、があると思っています。

よって、テストを書く人の日本語文章が「主観的な書き方」や「言葉足らずな書き方」になっている場合は、
結局何をやっているかわからず、テストのロジックを別ファイルに見にいく必要があり、コードが分かれているだけメンテナンスコストが増えるのではないかと感じたのですが、そのようなことはあまり気にしなくて良いのでしょうか?Capybaraだけでも同じでしょうか?

疑問その2

一度書いたテストコードを、日本語だけで、さらさら読み直す機会はどれくらいあるか?
もし読み直すとしたら、「テストが壊れて内容を修正する必要があるとき」や「新しい機能が増えてテストを追記する必要があるとき」であるはずです。そういう場合に細かなロジックは確認せずに、featureファイルの仕様をさらっと日本語で見るだけで、テストコードの改修を進めていく・・・ことは、あまり望ましくないのでは?懸念しています。

また、「既存のコードは日本語でさらっと理解するだけでよい」「どんどんテストを追記していくスタイル」のような運用もできなくはなさそうですが、stepsに重複が増え非DRY化したり、結局コード量が増えてもっさりしてきそうな気もしています。
また、1回しか登場しないstepでも必ず別ファイルに書き出し(シングルレベルの抽象化)が必要なので、
いざ改修が必要でコードを読む際に、テストコードを行ったり来たりして確認する必要があり、メンテナンスコストが増えるのでは危惧しています。

#その他所感
好みにも寄ると思うのですが、私はGherkin記法よりも、CapybaraだけのRspecのほうが
構造がはっきりしていてわかりやすいように感じるのですが皆様はどういう印象でしょうか?

■Rspecの場合、「beforeでセットアップをしているな」だったり「itの中に試験内容が書かれているな」などパッと見で推測して、
必要な箇所をさっと見つけられそうな気がします。

RSpec.describe "投稿", type: :request do describe "一覧画面を開く" do before { get posts_path } it("正しく表示出来る") { expect(response).to have_http_status(200) } end end

■一方でGherkinだと、日本語の文章を1字1句丁寧に読んでいかなければ、どこに何が書かれているかわからず、
いざコードをメンテナンスするタイミングで、修正が必要箇所を探し出しにくいように感じました。
このあたりは"慣れ"の問題なのでしょうかね?(・・)?

シナリオ: 投稿・サムネイル情報がメタで提供されている SNSにシェアされた投稿を見て、クリックしたくなるように視覚的に誘導したい og:titleを投稿時のコメントとし、サイトの内容が把握しやすいようにする og:description、descriptionメタは空白とし、シエア先サービス側の内容抽出ロジックに任せる Twitterにリンクを投稿すると、タイムライン上の表示にリンク先のサムネイルが提供される twitter:descriptionに関してはTwitterカード上に概要がなにも入っていないとバランスが悪いので定型文を入れる また、Facebookに投稿したときにニュースフィードに大きなサムネイルを表示する 前提 ユーザー画像付き投稿情報が登録されている もし 投稿ページを表示している ならば 以下の項目が要素に付加されていること | 項目 | | meta(ページの概要) | | openGraph(ページタイトル) | | openGraph(ページの種類:article) | | openGraph(ページのurl) | | openGraph(投稿のサムネイル画像url) | | openGraph(サイト名) | | openGraph(ページの概要) | | twitterMeta(ページタイトル) | | twitterMeta(ページの概要) | | twitterMeta(cardタイプ:summary_large_image) | | twitterMeta(サイトオーナーのtwitterユーザー名) |

ご意見の程、よろしくお願いいたします。

(引用元サイト)
https://sakanasoft.net/gherkin-is-valuable-test-practice/#RSpec

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問