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