おふくろさまより愛をこめて

mmmpa ふとしです。誠実なプログラミングを心がけたい。

RSpec entries

2016/11/01 00:01:19

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

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

2016/10/24 23:07:06

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

だいたいのサイトは User Agent で切り替えてると思うので、わざわざモバイルモードでテストが必要なのかしらとか思わないでもない (ダブルタップとか、スワイプをテストする?)、が一応メモ。 Capybara に Driver として登録 # chromedriver configuration # chrome の起動オプションが使える http://peter.sh/exp

2016/10/24 05:06:39

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

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

2016/10/17 04:23:37

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

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

2016/07/30 06:14:54

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

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

2016/07/24 16:00:27

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

自明だったり、すごく重かったり、細かすぎるテストたちがいます。 重いテストは短期的にも長期的にもコストになり、細かすぎるテストは実装変更時のコストが必要以上に高く、よくありません。 しかし、たまにやっときたいんですよというテストがありますので、本体に影響がないようにやっていきます。 Railsのディレクトリの外にもう一層つくる 以下のような構成になりました。 - /

2015/03/03 06:14:25

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

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

2015/02/25 23:14:34

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

ギョームおつかれさまです。 <a href="https://github.com/mmmpa/any_receiver">mmmpa/any_receiver</a> 素 これで http://192.168.30.130:3000/access こう返る。 {"path":"access","method":"get"} パラ

2015/02/05 14:00:29

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

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

2015/01/19 00:39:33

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

という思いがずっと前からあって下記エントリーのような対応をしていました。 <a href="http://mmmpa.hatenablog.com/entry/2014/05/11/%E3%83%86%E3%82%B9%E3%83%88%E3%81%8C%E9%80%9A%E3%82%8B%E3%81%9F%E3%81%B3%E3%81%AB%E3%83%AC%E3%83%83%E3

2015/01/12 13:48:33

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

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

2014/11/28 14:42:52

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.

2014/11/05 00:31:20

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

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

2014/05/23 19:53:21

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

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