2016年07月08日

Spec書くときの注意点

feature specで「こうすればこう動くはずなのになぜ動かん!」ってことが今までに何度もあったのですが、よく確認すればどうということはないものばかりな場合が大半です。
それでも詰まるときは大体煮詰まっていることが多いので、ブチ切れる前に確認しておきたいことをメモしておこうと思います

js: true

前回でも書きましたが、JSが動かないと表示されないような場所のspecを書くときは注意したいのがコレ。
当たり前ですがこれを書かないとJSが絡む動作は何も処理されません。
マジでよく忘れるから確認しましょう。

忘れる率ナンバーワン。

expect(page)〜などは危険

これも結構見かけますが後々テロを発生させる可能性がありますので、ちゃんとwithin辺りで検証箇所を絞っていただきたい。
画面全体を対象とするのはかなり危険です。

未来の平和のために必要な箇所を絞りましょう。

アクセス権はあるか

これはspecの書き方というよりアプリの仕様の問題だけど、プロジェクトページにアクセスするにはそのプロジェクトに所属するユーザーじゃないとダメとかはよくある話だと思います。

current_project.users << current_user

みたいにしてちゃんと所属させましょう。
もちろん他にも必要なフラグとかがあるなら、updateとか使って条件を満たしましょう。

結構知らない権限あってはまることがあります。

オブジェクトの更新とページを訪問するタイミングが前後してないか

例えば「Aというページを表示するには〇〇のBというフラグがtrueじゃないと表示されない」みたいなページのspecを書くとき

visit "/page_a"
〇〇.update!(B: true)

こんな順番で処理されてないか確認したいところ。
条件を満たしてからページへ行かないと表示されないのは当然ですね。

こんなん間違えるかよ!と思うかもしれませんが、contextとかがたくさんネストしていて、beforeとかで最初にvisitが書かれていることは結構多いので油断は禁物です。
(Factoryとかで最初からフラグ立てられれば一番なんですが)

最後に

これ全部僕が詰まったところなんですけどね(照