[解決済み] RSpecのlet()はいつ使うのか?
2022-03-20 21:15:54
質問
インスタンス変数を設定するためにbeforeブロックを使用することが多いです。そして、それらの変数を私の例全体で使用します。 最近、私は
let()
. RSpecのドキュメントによると、これは次のように使用されます。
... メモ化されたヘルパーメソッドを定義するため。この値は、同じ例で複数回呼び出すとキャッシュされますが、複数の例で呼び出すとキャッシュされません。
ビフォアブロックでインスタンス変数を使うのとどう違うのですか?また、どのような場合に
let()
対
before()
?
解決方法は?
私はいつも
let
をインスタンス変数に置き換えたのは、いくつかの理由があります。
-
インスタンス変数は、参照された時点で存在するようになります。 つまり、インスタンス変数のスペルをファットフィンガーすると、新しいものが作成され、初期化されて
nil
これは微妙なバグや誤検出を引き起こす可能性があります。 このためlet
はメソッドを作成するのでNameError
というのは、スペルを間違えたとき、私はそれが望ましいと思うからです。 スペックをリファクタリングしやすくなりますしね。 -
A
before(:each)
フックは、たとえそのサンプルがフックで定義されたどのインスタンス変数も使用しない場合でも、各エクスプレスの前に実行されます。 これは通常大きな問題ではありませんが、もしインスタンス変数のセットアップに長い時間がかかるなら、サイクルを浪費していることになります。 で定義されたメソッドに対してlet
初期化コードは、例で呼び出された場合のみ実行されます。 -
を変更することなく、サンプル内のローカル変数から直接letにリファクタリングすることができます。
を参照する構文です。 インスタンス変数にリファクタリングする場合は、以下のように変更する必要があります。
を追加する)。
@
). -
これは少し主観的ですが、Mike Lewisが指摘したように、仕様を読みやすくしていると思います。 私は、すべての依存オブジェクトを
let
を維持し、自分のit
ブロックを短くする。
関連リンクはこちらです。 http://www.betterspecs.org/#let
関連
-
[解決済み] RVM は関数ではないので、'rvm use ...' でルビーを選択してもうまくいきません。
-
[解決済み] Rubyでファイル名を変更するには?
-
[解決済み] Rubyのフィボナッチ数列(再帰)
-
[解決済み] rubyでディレクトリからすべてのファイルを要求する最良の方法?
-
[解決済み] Ruby で Fixnum から String への暗黙の変換ができない (TypeError)
-
[解決済み] gemをインストールできない - makeが内部または外部のコマンド操作可能なプログラムまたはバッチファイルとして認識されない。
-
[解決済み] Ruby: 文字列をブーリアンに変換する方法
-
[解決済み] Capybaraを使ったドロップダウンでのオプションの選択方法
-
[解決済み] rvmのインストールがうまくいきません。"RVMは機能ではありません"
-
[解決済み] Ruby 2.0.0p0 IRB警告。"DLは非推奨です。Fiddleをお使いください。"
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Ruby: 特定のバージョンのruby gemをインストールする方法は?
-
[解決済み] Gemfile が見つかりません。
-
[解決済み] RubyのNameError
-
[解決済み] nil から String への暗黙の変換ができないエラー
-
[解決済み] Rubyで=~と/Θはどういう意味ですか?
-
[解決済み] Railsアプリでhttpartyを使用して基本認証を使用するには?
-
[解決済み] ルビー.天井と.床
-
[解決済み] rvmのインストールがうまくいきません。"RVMは機能ではありません"
-
[解決済み] 構文エラー、予期しない ',', 期待する ')' 。
-
[解決済み] RSpecでモジュールをテストする