読者です 読者をやめる 読者になる 読者になる

みんなのちからになりたい

コピペでブログラムつくっていきたい

RSpecではまってる件

見よう見まねでRSpec書いてテストしてるんだけど、そもそもRSpecの仕様よくみてないっていうのもあるんだけどtopでbeforeでクラスのインスタンス作ったやつを使ってネストさせたdescribeで判定させるとき、desribeの度にインスタンスが新しく作られててはまった。
例えばこういう感じ。

こういうクラスがあって

require "bundler/setup"

class RSpecTest
  def initialize
    p "initialize"
  end
  def aaa
    true
  end
  def bbb
    false
  end
end

こういうspecを書いてテストすると

# encoding: utf-8

# -*- coding: utf-8 -*-
require 'spec_helper'

describe RSpecTest do

  before { @rspec = RSpecTest.new }
  describe "#aaa" do
    context "trueである" do
      subject { @rspec.aaa }
      it { should be_true }
    end
  end
  describe "#bbb" do
    context "falseである" do
      subject { @rspec.bbb }
      it { should be_false }
    end
  end

end

毎回インスタンス作られてる。

$ bundle exec rspec -c -f d

RSpecTest
  #aaa
    trueである
"initialize"
      should be true
  #bbb
    falseである
"initialize"
      should be false

こう書いても

# encoding: utf-8

# -*- coding: utf-8 -*-
require 'spec_helper'

describe RSpecTest do

  before { @rspec = RSpecTest.new }
  it "#aaa == trueである" do
    @rspec.aaa.should == true
  end

  it "#bbb == falseである" do
    @rspec.bbb.should == false
  end

end

同じ。

$ bundle exec rspec -c -f d

RSpecTest
"initialize"
  #aaa == trueである
"initialize"
  #bbb == falseである

書き方がまずいのかそもそもこういうものなのか。
ぐぐってみてるけどよくわからない。