3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

RSpecからMarkDown形式でテスト仕様書っぽいものを出力する

Last updated at Posted at 2018-07-12

はじめに

自動テストを書いていると、

  • 仕様変更があった場合に変更しないといけない箇所が増える
  • 一部だけ変更がされていて、どっちが正しいのかわからない

という悩みが付いて回ってくるのではないかと思います。

今回は、上記の問題を解決するために、

「RSpecから仕様書の雛形をつくる」

という方法について記載します。

事前準備

  1. RSpecを書きます

事前準備はこれだけです。
では、実際にRSpecから仕様書の出力をしていきましょう。

前提知識

今回は、RSpecの--dry-runオプションと--formatオプションを利用します。

  • --dry-run
    • テストを実行せず出力だけ得る
  • --format
    • 出力する際のフォーマッターを指定する
    • 標準で用意されているフォーマッターでは、少し物足りないので、今回はカスタムフォーマッターを作成して利用します。

カスタムフォーマッターの作成

出力したい内容にあうように、カスタムフォーマッターを利用します。
documentation_formatterが一番近かったので、今回はこちらを継承しました。

下記を、適当なところに置きます。
(今回は、spec/support/custom_formatter.rbとして保存)

require 'rspec/core/formatters/documentation_formatter'

class CustomFormatter  < RSpec::Core::Formatters::DocumentationFormatter
  RSpec::Core::Formatters.register self, :example_group_started

  def initialize(output)
    super
  end

  # 今回はインデント部分のみを調整した
  def current_indentation
    if @group_level == 0
      '## '
    else
      ' ' * ( @group_level - 1 ) * 4 + '- '
    end
  end
end

テストケースを出力する

全てのテストケースを出力したい場合

bundle exec rspec --dry-run --require spec/support/custom_formatter.rb --format CustomFormatter

特定のファイルのテストケースのみを出力したい場合

bundle exec rspec --dry-run --require spec/support/custom_formatter.rb --format CustomFormatter spec/models/hoge_spec.rb

実際に出力した結果

specファイル

spec/models/hoge_spec.rb

RSpec.describe Hoge do
  describe "testの検査" do
    it "testが成功するべき" do
     :
    end
  end 
end

実行コマンド

bundle exec rspec --dry-run --require spec/support/custom_formatter.rb --format CustomFormatter spec/models/hoge_spec.rb

実行結果

## Hoge
- testの検査
    - testが成功するべき

おわりに

RSpecはテスト仕様書として非常に有用な資産になると思っています。
今回は、その資産を他の部分でも有効活用できればと、仕様書として利用する方法を考えてみました。

  • 品質を保つ
  • リファクタリングをしやすくする

という部分以外で、誰もが面倒だと思っている

  • 仕様書を書く

という部分にたいしても有効である状況を作れれば、プロジェクトとしてより積極的にRSpecの導入が進んでいくのではないかと考えてます。

カスタムフォーマッターの書き方次第で、いろんなドキュメントの形式にあわせることができると思うので、一度お試しください。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?