ンンンパ

ふとしです

RSpec

Ruby 外から Web アクセスする何か (Capybara とか、cli とか) を RSpec でテストするときのアクセス先をモックする

mmmpa.mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmpa.net のテストをこの方法で行いました。 本編 たとえば、Capybara は各種ブラウザを介するアクセスのため、webmock が効かず、別の gem が必要なのは有名です。 https://github.com/o…

Capybara で Chromedriver をつかってモバイルモードでテストする時の Capybara.register_driver とか

だいたいのサイトは User Agent で切り替えてると思うので、わざわざモバイルモードでテストが必要なのかしらとか思わないでもない (ダブルタップとか、スワイプをテストする?)、が一応メモ。 Capybara に Driver として登録 # chromedriver configuration …

RSpec とか Capybara の Example 内で使いたいメソッドをクラス単位でまとめて使いやすくする gem を書いた。

これ github.com 先週の gem は 80 行ぐらいだったんですが、今回は 40 行です。 なぜ 入社してからこっち、ずっと Vue.js で SPA 制作という業務に従事していましたが、UI 系の宿命で (一部しか) テストがない。 そんななかで、わりと分岐の多い (難しくは…

最近 SQL にはまっているので、ついでに Rails というか ActiveRecord で発行された SQL query をカウントする gem を書いた。

Installation gem 'a_r_q_logger' github.com せつめい ActiveRecord::Base サブクラスのインスタンス生成をできるだけ抑えれば、それだけ処理時間が抑えられるのは自明とされています。 そこで、今は、できるだけ少ない queries に抑えることを目的として S…

Capybaraのウェイト時間で足りない場合、さらに待たせる。

Capybaraはfindなどの要素検索メソッドで、見つかるまである程度の時間待ってくれます。 時間が足りない場合は Capybara.default_max_wait_time = 30 などとすることで時間を増やせます。 all('hoge')[0].clickだとおなじみのundefined method `click' for n…

Rails開発でリポジトリには入れたくないんだけどローカルではやっておきたいテストがある場合の取りあつかい

自明だったり、すごく重かったり、細かすぎるテストたちがいます。 重いテストは短期的にも長期的にもコストになり、細かすぎるテストは実装変更時のコストが必要以上に高く、よくありません。 しかし、たまにやっときたいんですよというテストがありますの…

Rails で mountable なのを作ってる時、test/dummy 以下の FactoryGirl が二重に呼び出されてしまいアレだった。

ネット上で見つけたコードを馬鹿正直にコピペしていたら死んだし俺が悪かったという話です。 いつもの感じで rails plugin new new_plugin --mountable cd new_plugin rails g rspec:install したままではプラグイン用に生成される factories にパスが通って…

API へのアクセス後にコールバックがいる動作のテスト用にアクセス内容を表示するだけの Rails 用意した。

ギョームおつかれさまです。 mmmpa/any_receiver 素 これで http://192.168.30.130:3000/access こう返る。 {"path":"access","method":"get"} パラメーター パラメーターを渡すと http://192.168.30.130:3000/access?param=param_value こんな感じ。 {"para…

Rails の FormBuilder をテストしようと思ったら new にわたす template をどうすればいいかわからず困った

view 内の form_for から instantiate_builder を経てこういう形で呼びだされます。 builder.new(object_name, object, self, options) self is 何?かというと view から呼びだされるのでもちろん view ですが、FormBuilder 対象のテストなので view なんて…

ActiveModel の errors.messages に入ってるエラーメッセージが、どの validation でひっかかったかテストで知りたい。

という思いがずっと前からあって下記エントリーのような対応をしていました。 テストが通るたびにレッドライト!グリーンライト!ってさけんでるんだけど RSpec でわからないことがある。 - うさぎ飢餓 Rails 触りはじめのエントリーでとても懐かしい。 それ…

Rails Engine を RSpec でアレしてたら controller spec で No route matches が出まくって困った

rails plugin new --mountable からつくる Rails プラグイン作成を試しています。 自動テストにはいつも RSpec を使っているので使えるように調整して model spec は問題なく終了したのですが、controller spec でひっかかりました。 generate にまかせた sp…

Ruby on Rails の Routes を Controller スペックで使える感じに内部で取得する。

ログイン時、非ログイン時の振り分けなんかは全自動総当たりテストしたいので。 routes = Rails.application.routes.routes.map do |route| path = route.path.spec.to_s.gsub(/\(\.:format\)/, "") params = path.scan(/:([a-zA-Z_]+)/).flatten.collect(&:…

Capybara で feature から 2 つ以上の scenario を回すと Capybara::Poltergeist::DeadClient で死ぬ

用もないのに Poltergeist などで全ページスクリーンショット撮るのが半ば趣味です。 さて今日も今日とて楽しくフィーチャスペックを書いておりましたところ死にました。 Failure/Error: auth_manager(page, kill: true) Capybara::Poltergeist::DeadClient:…

RSpec 3 にアップデートするにあたっての章が「RSpec による Rails テスト入門」に追加されたらしいので早速ためした。

読むと RSpec 2.99 beta2 を導入すると RSpec 3 でなくなったりする API を使ってたりすると警告を出してくれるらしいので早速ためしました。 うまれてはじめてテスト書き出いてから 1 週間とか 2 週間なので、変更するポイントはほとんどなくて、指示に従っ…