RSpec

Anonymous controllerは独自のroutesを使用する

まず、RSpec3でのAnonymous controller変更点について触れる。 従来Anonymous controllerはBaseClassを指定しない状態で定義すると必ずApplicationControllerのSubClassとして定義されていた。 RSpec3以降指定しない状態だとdescribe_classをBaseClassとして…

RSpec3でのスタブ、モック記法

## 以前の記法 現在の記法 ## double.should_receive(:hoge) expect(double).to receive(:hoge) ## double.stub(:hoge) allow(double).to receive(:hoge) ## double.stub_chain(:hoge, :fuga) allow(double).to receive_message_chain(:hoge, :fuga)

RSpec-Rails3.1以降ではspec/supportを自動的にロードしない

factory_girl_railsのSyntax追加をいつも通りspec/support/factory_girl.rbを作成したが有効にならないので調べた。ChangeLogに記載されていた。 Update rails_helper generator to allow users to opt-in to auto-loading spec/support files instead of fo…

RSpec3でのshouldについてメモ

shoulda-matchers*1のExampleを見ていると、ワンライナーshouldで書いてあることが多くて、RSpec3だと原則shouldは使わないからどう書くんだろうと疑問に思っていたらshouldについて認識不足だったことが下記ページで分かった。Ruby - RSpecの最新の動向・RS…

guard-rspecとspringの連携

既にRailsではspringがデフォルトで導入されている。 当然rspecを使う際にもspringを活用したいので方法を調べた。guard/guard-rspecgithub.com guard-rspecにOptionsとして紹介されているspringを用いた場合のGuardfileの書き方。おお簡単じゃんということ…

rspec-rails v2.13.0にしたらexpect {}.should のWARNINGがでた

***************************************************************** DEPRECATION WARNING: you are using deprecated behaviour that will be removed from rspec-3. * `expect { }.should` is deprecated. * please use `expect { }.to` instead. *******…

rspec-mocks v2.10.1でstub_chainでselectを指定できない

掲題の件こういうエラーがでる。 NoMethodError: private method `select' called for #<Object:0x00000008071f40>下記issuesにて既に挙げられていて既に対応済み。tagを覗いて見たら2.11系以降には適応されていた。 Cannot stub_chain with the 'select' method · Issue #587 · rspec</object:0x00000008071f40>…

and_yieldを使ってブロック付きメソッドのstubを覚えた

RSpec describe 'hoge' do before do Model.stub_chain(:all, :each).and_yield(1).and_yield(2) end # 以後略... end 実装 Model.all.each do |hoge| p hoge end ↑みたいな事するとhogeが1回目が1。2回目が2になるのでとても便利だなあ。

Viewのインスタンス変数のセットについて

ViewのSpecろくに書いてなかったせいでいざ書くときにようわからんかったのでdocみた。 http://rubydoc.info/gems/rspec-rails/file/README.md#View_specs assign(key, val)を使えばいいみたい。んでこの書き方はRSpec2系からなので RSpec1系をもし使ってい…

RSpecでTime.nowを起点にしたテストを書く時Timecopを使うと便利かも

たとえば現在時刻から3日前だったらこうなるべきみたいのをテストを書いてて 処理は3.days.agoとかだった場合に普通に書いてあると日数がたつとテストが通らなくなる。 https://github.com/travisjeffery/timecop そんな時は、Timecopでテストの時は時間を指…

RSpec Mocks Receive Counts

全然覚えられないのでここに書いたということだけ覚えましょう https://github.com/rspec/rspec-mocks ## 何も指定しないと1回です # 1回 double.should_receive(:msg).once # 2回 double.should_receive(:msg).twice # n回 double.should_receive(:msg).exa…

Deviseを継承したControllerのSpec

Deviseのカスタマイズがしたくて継承してController作ってSpecからリクエストしたら怒られたのです Failure/Error: get 'new' AbstractController::ActionNotFound: Could not find devise mapping for path "/users/sign_in". Maybe you forgot to wrap you…

RSpecでrender partialのテスト

describe 'GET "hoge"' do before do get :hoge end it { response.should render_template(partial: '_hoge') } end

attr_accessibleのrole毎のテスト

Rails3.1からattr_accessibleにasでロールを指定できるようになっていますが、そこのテストModel # -*- coding: utf-8 -*- class User < ActiveRecord::Base attr_accessible :name attr_accessible :name, :active, as: :admin end 例えば管理者はユーザが…

RSpec RailsのAnonymous controllerが便利

全てのcontrollerでこのbefore_filterを実行したいという時によく継承元のApplicationControllerで実施することがあります # -*- coding: utf-8 -*- class ApplicationController < ActionController::Base before_filter :check private def check redirect…

RSpecでbefore_filterをstubる

ほあー controller.stub(:filter_name).and_return("hoge")

Rails2系でGuard,Sporkを使ったBDDの自動実行環境を作る

Rails2系ではautospecを使ってやっていたけどGuardとSporkを使ったほうがいい気がしたので。 Install インストールする必要のある物、及びバージョンは下記サイトを参考に Ruby1.9.3 + Rails2.3.14 + rspec + guard + spork でテスト - 鶏肉がいいよね。 rsp…

Rails2でのautotestの設定メモ

環境 Rails2 RSpec 1.3.2(vendor/pluginsにいれた) RSpec-Rails 1.3.4(vendor/pluginsにいれた) Rcov 0.9.11 ZenTest 4.0.0 特に新しいことをやってるわけでもなく、環境のバージョン自体は古いので新しい環境(特にRails3系の場合)を構築するのには 全く役に…

RSpecの実行を早くするためにSpork使ってみた

とても今更な話題だけどSporkつかってみた。実行速度が1/10くらいはやいはやい Install $ gem install spork Config ## spec_helper.rbにspork用の設定が足される $ spork rspec --bootstrapspec_helper.rb require 'rubygems' require 'spork' Spork.prefor…

Sinatra+MongoDB+RSpec2な環境を作る

Ruby,Rubygems,MongoDBはインストールされているものとする MongoDBのインストールについてはCentOSであれば前にちょっと書いた 過去の記事:CentOS5.5にMongoDBをインストールする - chulip.org インストール Bundlerを使用して必要なGemをインストールする…

RSpecインストールの仕方

忘れてさがすの面倒なのでそのまま引用してメモする。Rails3系はいっぱい転がってるのでまた今度 https://github.com/dchelimsky/rspec/wiki/rails Install rspec and rspec-rails plugins for Rails >= 2.1.0 ruby script/plugin install git://github.com/…

RSpecでテストするときにfactory_girlを使う

fixturesが担っていたテストデータのところにfactory_girlを使うイメージ? 複数テーブルにまたがるデータを定義するときにfixturesより格段にやりやすいみたい。 その利点はまだ実感できてないけどとりあえず使い方 環境 Rails3,bundle全盛だけどRails2の話…

RSpecのSubjectについて

subjectを使うとsubjectの値がitのレシーバになる為、共通のレシーバについてテストを書くときに便利 # -*- config: utf-8 -*- require 'rspec' describe 'homu' do before do @homu = "hoge" end subject { @homu } it { should == "hoge" } it { should be…

PostgresSQLでrake specするとNOTICEがいっぱいでる

NOTICE: CREATE TABLE will create implicit sequence "peroperos_id_seq" for serial column "peroperos.id" NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "peroperos_pkey" for table "peroperos" 〜略〜database.ymlに書いてあるけどm…