セキュリティ系の勉強・その他開発メモとか雑談. Twitter, ブログカテゴリ一覧
本ブログはあくまでセキュリティに関する情報共有の一環として作成したものであり,公開されているシステム等に許可なく実行するなど、違法な行為を助長するものではありません.

【Capybara】vue.jsを使ったページのfeature test時に値が取れない

//

前提

Ruby On Railsプロジェクト内vue.jsでフロントエンドを賄っています。Capybarafeatueテストをする時、値がうまく取れずにコケた話です。

問題

ajaxを使い、並び順等を非同期で変更できるようなtableを持つページに対してテストを書こうとしました。しかし、値をall()find()で取得しようとしても、find("hoge").text.valueの値は""の空の文字列が帰ってきて、テストは失敗します。
binding.pryをテスト中に挟んだところ、formが上手く描画しきれてないような気がしました。formvalueresource.idであったり、resource.titleのままだったので、vue.jsが走る前の状態なんだなと言うことはわかります。ググっていくうちに、JavaScriptがそもそも動いていない、もしくはCapybaraがデフォルトでJavaScriptをテストできないのでは?と思い始めました。

解決

初めにjs: trueを記述してあげれば、JavaScriptを使用する者に対しても、テストが実行できるようになります。ちなみに、chromeが入っていないとエラー出るので入れておきましょう。(私はVivaldiしか入っていなかった..)

describe "HogePage", type: :feature, js: true do

...

end

余談

とても時間を使ってしまいましたが、単純な知識不足。原因にあたりをつけるために、save_and_open_pageメソッドが役立ちました。これは、テスト中に挟むことで、その時のhtmlをブラウザで開いてくれます。今回ではformtbody部分が<script>タグで囲まれていて未実行状態のような感じだったので、あたりをつけられました。以上。