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

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

ただいまの
回答率

89.23%

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

受付中

回答 0

投稿 編集

flag 質問者が2日前に「まだ回答を求めています」と言っています。

  • 評価
  • クリップ 0
  • VIEW 71

napoano365

score 26

ご意見いただきたいこと

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

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

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

  • ただいまの回答率 89.23%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる