見よう見まねで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である
書き方がまずいのかそもそもこういうものなのか。
ぐぐってみてるけどよくわからない。