【RSpec】変数を使いたい時はlet


はじめに

RSpecのテストで変数を書くと、rubocopに怒られた。のでその対処について。

怒られ方

Defining constants inside of specs can cause spurious behavior. It is almost always preferable to use let statements, anonymous class/module definitions, or ? stub_const (convention:Airbnb/SpecConstantAssignment)

letを使えって言われている事はわかる。。

spec の中で定数を定義すると、スプリアスな動作を引き起こす可能性があります。ほとんどの場合、let文、匿名のクラス/モジュール定義、またはstub_const を使用することが望ましいです。

うんうん、スプリアスね。

google翻訳だと、spurious behaviorで、偽りの行動。でした。
要は意図しない変数化になるで、という事かな。

letを使う

もともとは、RSpecの中で、このように書いていた。

  API_KEY = Rails.application.credentials.api[:API_KEY]

これを、最終的に

  let(:api_key) { Rails.application.credentials.api[:API_KEY] }

この様に変えました。
呼び出すときは、

 headers = {
    'Authorization': "Bearer #{api_key}",
 }

この様に普通に変数として呼び出せます。

letを使うことのメリット

  • テストに使う変数をletでコードの上の方で記述してしまうことで、itの中の検証部分が見やすく、わかりやすくなる
  • もし、beforeの中に普通に変数として定義すると、テストケースの中で使われない変数があった場合も、生成されてしまうが、letであれば、遅延評価で必要なときだけ呼ばれる。

などなど、、
詳しいことはすべてこちらから教えて頂きました。
RSpecのletを使うのはどんなときか?(翻訳)

終わりに。

最後まで読んで頂きありがとうございます
転職の為、未経験の状態からRailsを学習しております。正しい知識を着実に身に着け、実力のあるエンジニアになりたいと考えています。継続して投稿していく中で、その為のインプットも必然的に増え、成長に繋がるかと考えています。
今現在、初心者だからといって言い訳はできないですが、投稿の内容に間違っているところや、付け加えるべきところが多々あるかと思いますので、ご指摘頂けると幸いです。この記事を読んで下さりありがとうございました。