Tbpgr Blog

元エンジニア 人事 tbpgr(てぃーびー) のブログ

RSpec | rspec | 明示のsubject

概要

rspec | 明示のsubject

詳細

明示的に初期化する場合は下記の構文を利用します。

subject { インスタンス }

構成

$ tree
┣ lib
| ┗ hige.rb
┗ spec
    ┣ hige_spec.rb
    ┗ spec_helper.rb

hige.rb

# encoding: utf-8
class Hige
  attr_accessor :msg
  def initialize(str)
    @str = "str"
  end

  def hige
    "hige-#{@str}"
  end
end

hige_spec.rb

require 'spec_helper'
require 'hige'

# トップレベルの利用例
describe Hige do
  subject { Hige.new("str") }
  it "hige" do
    puts subject.class
    expect(subject.send "hige".to_sym).to eq("hige-str")
  end
end

# ネスト時の利用例
describe Hige do
  subject { Hige.new("str") }
  context "hige context" do
    it "hige" do
      puts subject.class
      expect(subject.send "hige".to_sym).to eq("hige-str")
    end
  end
end

# beforeブロックからのアクセス時
describe Hige do
  subject { Hige.new("str") }
  before(:each) do
    subject.msg = "msg"
  end
  it "hige" do
    puts subject.class
    expect(subject.msg).to eq("msg")
  end
end

# subjectからヘルパーメソッドを利用
describe Hige do
  def get_hige(msg)
    Hige.new(msg)
  end
  subject { get_hige("str") }
  it "hige" do
    puts subject.class
    expect(subject.send "hige".to_sym).to eq("hige-str")
  end
end

テスト結果

$ rspec
Run options: include {:focus=>true}

All examples were filtered out; ignoring {:focus=>true}
Hige
.Hige
.Hige
.Hige
.

Finished in 0.002 seconds
4 examples, 0 failures