#ご意見いただきたいこと
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
あなたの回答
tips
プレビュー