2

クラス メソッドをテストするとき、インスタンスを自動的に作成する必要はありません。暗黙のサブジェクトは自動的に作成されますか、それとも参照された場合のみ作成されますか?

describe MyClass do

  it 'uses implicit subject' do
    subject.my_method.should be_true
  end

  it 'does not create a subject' do
    MyClass.works?.should be_true
    # subject should not have been created
  end
end
4

1 に答える 1

4

subject必要なオブジェクトを作成して返すメソッドのようです。そのため、呼び出されたときにのみサブジェクト オブジェクトが作成されます。

自分でテストするのは簡単ですが...

class MyClass
  cattr_accessor :initialized

  def initialize
    MyClass.initialized = true
  end

  def my_method
    true
  end

  def self.works?
    true
  end
end

describe MyClass do
  it 'uses implicit subject' do
    MyClass.initialized = false
    subject.my_method.should be_true
    MyClass.initialized.should == true
  end

  it 'does not create a subject' do
    MyClass.initialized = false
    MyClass.works?.should be_true
    MyClass.initialized.should == false
  end
end

これらの仕様は合格であり、怠け者であることを証明しています。

于 2013-07-16T23:45:59.303 に答える