RSpec+Capybaraテストのhave_selectorでNokogiri::CSS::SyntaxErrorエラー

スポンサーリンク

RSpec + Capybara による Rails アプリのテストで、Request Spec で以下のようなテストを書きました。Nokogiri::CSS::SyntaxError というエラーが原因ぽいことに辿り着いたのですけど、結局直接的な解決策は見つけられず… 正規表現マッチャーを使って回避しました。

【お知らせ】 英単語を画像イメージで楽に暗記できる辞書サイトを作りました。英語学習中の方は、ぜひご利用ください!
画像付き英語辞書 Imagict | 英単語をイメージで暗記
【開発記録】
英単語を画像イメージで暗記できる英語辞書サービスを作って公開しました
スポンサーリンク

— 環境 —
rails-4.0.1
rspec-rails-2.14.0
capybara-2.2.0

ユーザーのポストが正しいCSS IDを持つことを確認するテスト

users#show (“user_path(user)”)のページで、ユーザーが投稿したポスト(user.posts)が正しい CSS ID を持って表示されているかを確認するテスト。

spec/requests/post_pages_spec.rb

ユーザーのポストは、post-1-2(post-“ユーザーID”-“ポストID”)のような書式の CSS の id が付加されているとします。

Nokogiri::CSS::SyntaxError が発生

上述のテストで、users.posts を each で回して、have_selector で適切な CSS ID が設定されていることを確認しようとしたのですが、以下のエラーが発生しました。

なぜか post.id が取得できず空になる。”post” の文字列を他のものに変更したら、post.id が取得できたりと謎だらけ。

色々とテストコードを変えつつ試してたら以下のように出て、Nokogiri が HTML 中の CSS 指定の部分をパースするとこでエラーになってるみたいです。

解決できないので、代わりに have_xpath で試そうとしたら今度は以下のエラー。

expect(page.html).to match で回避

結局原因が分からず解決策が見つからなかったので、正規表現のマッチャーを使ってテストしました。

これでテストを通ったのですがなんか不安(笑。

スポンサーリンク
私は Rails のテストフレームワークには RSpec を使っています。サーバーのテスト用に Serverspec もおすすめです。
 
スポンサーリンク

Leave Your Message!