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

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

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

RSpecのbeforeのやつ

RSpecではまってる件 - みんなのちからになりたい

このまえはまってたやつ、やっぱそういうことみたいだった。

RSpec の it { … } と速度の話 #Ruby #Rspec #Rails - Qiita

it や its 毎に before(:each) と after(:each) が走るため。

なるほど勉強になる。

こうやればいいらしい。

  it do
    @rspec.aaa.should be_true
    @rspec.bbb.should be_false
  end

勉強になる。
ただこれだと最後のやつしかログに表示されないのでちょっと悲しい。
putsとか間にはさむといいんだろうか。

いまなやんでるのが、テストの書き方がいまいちわからない。
例えばHashのクラスをテストするとき、ざっくりテスト書くと

  • #set
    • ハッシュにセット
  • #get
    • キーの値を取得
  • #size
    • サイズを返す
  • #delete
    • ハッシュから削除
  • #clear
    • ハッシュをクリア

これが出来ればいいとして、setのテストするにはgetができないとダメだし、getのテストするにはsetできないとダメ。
テストするにはセットでやらないと効率良くないので、毎回インスタンス作られるとテストがめんどくさいと思う。
なので引き継がれれば

  describe "HashTestのテスト" do
    before { @hash = HashTest.new }
    describe "#set & #get" do
      subject do
        @hash.set "key", "value"
        @hash.set "key2", "value2"
        @hash.get "key"
      end
      it { should == "value" }
    end
    describe "#size" do
      subject do
        @hash.size
      end
      it { should == 2 }
    end
    describe "#delete" do
      subject do
        @hash.delete "key"
        @hash.get "key"
      end
      it { should be_nil }
    end
    describe "#clear" do
      subject do
        @hash.clear
        @hash.size
      end
      it { should == 0 }
    end
  end

みたいな感じで書けるんだけど、ダメなので

  describe "HashTestのテスト" do
    before { @hash = HashTest.new }
    context "ぜんぶテスト" do
      it do
        @hash.set "key", "value"
        @hash.set "key2", "value2"
        @hash.get("key").should == "value"
        @hash.size.should == 2
        @hash.delete "key"
        @hash.get("key").should be_nil
        @hash.clear
        @hash.size.should == 0
      end
    end
  end

みたいな感じになるんだと思う。
ただこれだと

  HashTestのテスト
    ぜんぶテスト
      should == 0

こんな感じに表示されるのでいまいちな感じがする。

でも厳密には1つ1つまじめにやったほうが信頼性があるのでそうしろってことなんだと思う。