Rspecでインスタンス変数が参照できない
Rspecの世界からController内メソッドでインスタンス変数@hoge
を利用した場合は、
直接Rspecからインスタンス化された@hoge
は別物である。
まず、この事実を理解すべきだった。
Controllerの中の値をテストする
Rspec側からRailsのController側でインスタンス化された値を評価する場合はassigns(:hoge)
で参照するとよい。
また、RspecからDBアクセスして取り出す方法もあるのでこちらも忘れずに。
expect(Model.last.name).to eq 'modelname'
で評価する。
どちらもどのような値がアサインされていればよいのかを意識してテストを書く。
その他
itブロック・contextブロック・describeブロックの中で定義した変数のスコープはその中に限る。
そのため、スコープを飛び越えて同じ値を扱うためにはインスタンス変数を利用する必要がある。
はじめてのテストということでハマってしまった。
テストではRailsの世界の変数か、Rspecの世界の変数なのかを明確に意識する必要があった。
実行中のプログラム内なのか、その外なのかを常に意識する。
RequestヘッダをRspecで作ってそれをRailsに投げる。
Railsの中のController内で、どのような値がアサインされるかテストする。
どの世界の値を取得して何と比べるのか。
何をテストすべきかを意識していれば回避できる問題。