RSpec基礎:セットアップ,命名および基本構造


ときにプログラミングを起動すると、それをテストする方法を知って簡単ではない、どのようにテストするには、なぜあなたがテストする必要があります?TDD(Test Drive Developmentのような)がベストプラクティスです.しかし、最初に、あなたがそれを書く前にあなたのコードが何をすべきか知るのは難しいです.
テストは、その可能性を明らかにする練習を必要とします.
私がプログラミングを始めたとき、私は他の人々のテストをコピーします.しかし、しばらくして、私のテストは、エッジケース、私が見落とした潜在的なバグを明らかにするだろう.
それで、私は一連の短いノウハウを知っていて、whatsを知っていて、whatsを知っていて、新参者にいくらかの使用でありえました;rspecを用いたテストの一側面を説明する簡潔なエッセイ
これはあなたに楽しく聞こえる場合は、基本から始めましょう.

rspecとは
まず最初に、明らかな質問から始めましょう.
RSpecはRubyコードをテストするためにRubyで構築されたテストフレームワークです.それはあなたのプログラムの動作をテストすることに焦点を当てています.何が起きるのだろうか.
そこで利用可能ないくつかのテストフレームワークの一つです.また、あなたはminitestを知っているかもしれません.

アプリケーションへのrspecの追加
RSpecチームは、簡単にRailsアプリケーションでフレームワークを使用するように、宝石を維持します.
まず、gemfileにrspecを追加します.
  # Gemfile

  gem "rspec-rails", group: [:development, :test]
宝石をインストールします.
  bundle install
足場rspecの設定とアプリケーションのテストフレームワークをrspecに切り替えます.
  rails generate rspec:install
さて、あなたの移動を実行し、テストデータベースを準備します.
  rails db:migrate && rails db:test:prepare
そら!さて、入力してテストを実行することができますrspec spec あなたのシェルで.spec テストファイルを作成するフォルダです.

rspecファイルの命名
rspec命名規約は簡単です.
  • users_controller.rbusers_controller_spec.rb
  • user.rbuser_spec.rb
  • user_notification_job.rbuser_notification_job_spec.rb

  • Specフォルダのアーキテクチャ
    RSpecとRailsが一緒にスムーズに動作するようにするには、あなたのapp フォルダ.
      my_app_directory
      |
      |- app
      | |
      | |- models
      | |
      | |- user.rb
      |
      |- spec
         |
         |- models
            |
            |- user_spec.rb
    
  • app/models/user.rbspec/models/user_spec.rb
  • app/serializers/admin/book_serializer.rbspec/serializers/admin/book_serializer_spec.rb
  • など.
  • キャッチは1つだけです.
  • app/controllers/users_controller.rbspec/requests/users_controller.rb . RSPECチームは、あなたに使用を拒否しますspec/controllers . なぜ?テスト要求は、スタック(ルーティング、要求、応答など)を介してコントローラの動作の動作をテストすることができます1 .
  • コントローラをテストするために、フォルダの構造は以下の通りです.
      my_app_directory
      |
      |- app
      | |
      | |- controllers
      | |
      | |- users_controller.rb
      |
      |- spec
         |
         |- controllers ❌
         |
         |- requests
            |
            |- users_controller_spec.rb
    

    rspecファイルの構造
    我々がテストしたいと言いましょうUser モデル.ファイルの構造は次のようになります.
      # spec/models/user_spec.rb
    
      require 'rails_helper'
    
      RSpec.describe User do
        # test stuff
      end
    
    そら!セットアップが完了しました.
    しかし、今、私たちは、私たちは何が起こっているのより良い理解を得るように、各要素に掘るしたいと思います.
  • require 'rails_helper' rspecの設定を読み込みます.rails_helper.rbspec フォルダ.RSpecはボックスのように心配する必要はないので構成されています.
  • RSpec はすべてのrspecコードのコアモジュールです.それをカプセル化し、多くの物事をインスタンス化する:構成、期待、例など、コードをチェックアウトすることができますhere .
  • .describeRSpec モジュールです.それは、一般的な抽象化のまわりであなたのテストを分類します:クラス、要求などUser モデル.
  • 以下のコードはthe RSpec repository .
      def self.expose_example_group_alias(name)
        return if example_group_aliases.include?(name)
    
        example_group_aliases << name
    
        (class << RSpec; self; end). __send__ (:define_method, name) do |*args, &example_group_block|
          group = RSpec::Core::ExampleGroup. __send__ (name, *args, &example_group_block)
          RSpec.world.record(group)
          group
        end
    
        expose_example_group_alias_globally(name) if exposed_globally?
      end
    
    メタプログラミング的なビットのために読むのは少し難しいです、しかし、主な考えはそれが.describe インスタンスメソッドRSpec::Core::ExampleGroup テストしている抽象化のクラスUser ) そして、あなたが引数として書いたテスト.
  • User クラスはテスト中です.それは、議論として渡されます.describe メソッド.
  • do ... end あなたがテストを書いているブロックです.これらは.describe メソッド&example_group_block 上記).
  • 私はこれらの説明をどのようにrspecの作品のより良い理解を与える願っています.次回は最初のテストを書きます.
    何か気づいた?or create an issue on GitHub .
    歓声
    レアミー

  • それを指摘してくれてありがとう!