RSpec
まず、RSpec3でのAnonymous controller変更点について触れる。 従来Anonymous controllerはBaseClassを指定しない状態で定義すると必ずApplicationControllerのSubClassとして定義されていた。 RSpec3以降指定しない状態だとdescribe_classをBaseClassとして…
## 以前の記法 現在の記法 ## 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)
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…
shoulda-matchers*1のExampleを見ていると、ワンライナーshouldで書いてあることが多くて、RSpec3だと原則shouldは使わないからどう書くんだろうと疑問に思っていたらshouldについて認識不足だったことが下記ページで分かった。 qiita.com expect記法が導入…
既にRailsではspringがデフォルトで導入されている。 当然rspecを使う際にもspringを活用したいので方法を調べた。github.com guard-rspecにOptionsとして紹介されているspringを用いた場合のGuardfileの書き方。おお簡単じゃんということで早速spring rspec…
***************************************************************** DEPRECATION WARNING: you are using deprecated behaviour that will be removed from rspec-3. * `expect { }.should` is deprecated. * please use `expect { }.to` instead. *******…
掲題の件こういうエラーがでる。 NoMethodError: private method `select' called for #<Object:0x00000008071f40>下記issuesにて既に挙げられていて既に対応済み。tagを覗いて見たら2.11系以降には適応されていた。 Cannot stub_chain with the 'select' method · Issue #587 · rspec</object:0x00000008071f40>…
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のSpecろくに書いてなかったせいでいざ書くときにようわからんかったのでdocみた。 http://rubydoc.info/gems/rspec-rails/file/README.md#View_specs assign(key, val)を使えばいいみたい。んでこの書き方はRSpec2系からなので RSpec1系をもし使ってい…
たとえば現在時刻から3日前だったらこうなるべきみたいのをテストを書いてて 処理は3.days.agoとかだった場合に普通に書いてあると日数がたつとテストが通らなくなる。 https://github.com/travisjeffery/timecop そんな時は、Timecopでテストの時は時間を指…
全然覚えられないのでここに書いたということだけ覚えましょう 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からリクエストしたら怒られたのです Failure/Error: get 'new' AbstractController::ActionNotFound: Could not find devise mapping for path "/users/sign_in". Maybe you forgot to wrap you…
describe 'GET "hoge"' do before do get :hoge end it { response.should render_template(partial: '_hoge') } end
Rails3.1からattr_accessibleにasでロールを指定できるようになっていますが、そこのテストModel # -*- coding: utf-8 -*- class User < ActiveRecord::Base attr_accessible :name attr_accessible :name, :active, as: :admin end 例えば管理者はユーザが…
全てのcontrollerでこのbefore_filterを実行したいという時によく継承元のApplicationControllerで実施することがあります # -*- coding: utf-8 -*- class ApplicationController < ActionController::Base before_filter :check private def check redirect…
ほあー controller.stub(:filter_name).and_return("hoge")
Rails2系ではautospecを使ってやっていたけどGuardとSporkを使ったほうがいい気がしたので。 Install インストールする必要のある物、及びバージョンは下記サイトを参考に Ruby1.9.3 + Rails2.3.14 + rspec + guard + spork でテスト - 鶏肉がいいよね。 rsp…
環境 Rails2 RSpec 1.3.2(vendor/pluginsにいれた) RSpec-Rails 1.3.4(vendor/pluginsにいれた) Rcov 0.9.11 ZenTest 4.0.0 特に新しいことをやってるわけでもなく、環境のバージョン自体は古いので新しい環境(特にRails3系の場合)を構築するのには 全く役に…
とても今更な話題だけどSporkつかってみた。実行速度が1/10くらいはやいはやい Install $ gem install spork Config ## spec_helper.rbにspork用の設定が足される $ spork rspec --bootstrapspec_helper.rb require 'rubygems' require 'spork' Spork.prefor…
Ruby,Rubygems,MongoDBはインストールされているものとする MongoDBのインストールについてはCentOSであれば前にちょっと書いた 過去の記事:CentOS5.5にMongoDBをインストールする - chulip.org インストール Bundlerを使用して必要なGemをインストールする…
忘れてさがすの面倒なのでそのまま引用してメモする。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/…
fixturesが担っていたテストデータのところにfactory_girlを使うイメージ? 複数テーブルにまたがるデータを定義するときにfixturesより格段にやりやすいみたい。 その利点はまだ実感できてないけどとりあえず使い方 環境 Rails3,bundle全盛だけどRails2の話…
subjectを使うとsubjectの値がitのレシーバになる為、共通のレシーバについてテストを書くときに便利 # -*- config: utf-8 -*- require 'rspec' describe 'homu' do before do @homu = "hoge" end subject { @homu } it { should == "hoge" } it { should be…
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…