LoginSignup
0
0

More than 5 years have passed since last update.

RSpecのletで変数を作成した値がnilになる

Last updated at Posted at 2016-07-14

letで作成した変数をかきかえようとするとnilになる

タイトルがわかりづらくてごめんなさい

どういうことかというと。。。

let(:str) { 'str' }

before do
 str = str+'ing'
end

#=> strがnilになる。

このような現象が起きる。
問題解決としては単純に違う変数名を指定すればいいだけのこと。だけど、まさかnilになるとはおもってもいなかったので、共有する。

なぜこのような問題となったのか?

2.3.0から導入されているfrozen_string_literalをrspecないに導入した際に

can't modify frozen string

このようなエラーが起きた。
だったら、変数に代入すればいいじゃんということで、同じ変数名で代入したら、違うエラーが発生したのだ。binding.pryなどで調べると上記の問題を発見!!!

まーrubyとかなら変数の中身が書きかわるという感じでそのまま無意識でこのようなことをしてしまうと思う。

みんなの役に立てるといいなー。。。

このような記事をみつけることができなかたので、自分のためにももしかしたらほかの人のためにもなるのではないかと思い今回投稿することにした。

なにか間違っていることや、違うアプローチがあればコメントお願いします。

追記
コメントでもいただいたように自分が勘違いをしていた。
そもそもletは変数ではなくmemoized helper methodを定義しているらしい。

コメントいただいた方、ありがとうございます。
新たに勉強になりました。

0
0
2

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
0
0