0

rpsec 2.12 では、次のヘルパー メソッド定義が機能することを期待していました。

module X
private
  def build_them(type)
    puts 'Catching the star'
  end  
end
context 'public/private instance methods' do
  subject{ Class.new { extend(::X) } }
  def subject.build(type)
    puts "Throwing a star"
    build_them(type)
  end
  it{ should respond_to :build}
end

実際の結果は失敗した仕様です:

expected #<Class:0x00000002ea5f90> to respond to :build

私は例が合格することを期待していました

これを正しく行う方法に関する提案はありますか?

4

1 に答える 1

1

ブロックを渡さずに呼び出すsubjectと、実際には 'subject' ブロックが proc 形式で返されます。これは、コードでこれを行うと、次のことを意味します。

def subject.build(type)
  #...
end

実際には、proc が返すオブジェクトではなく、 proc自体で「ビルド」を定義しています。

サンプル ブロックではit {...}、proc が返すオブジェクトに対してエクスペクテーションが実行されるため、ご覧のようにテストは失敗します。

テストに合格するには、'subject' ブロックが返す実際のオブジェクトで 'build' メソッドを定義する必要があります。

module X
  private
    def build_them(type)
      puts 'Catching the star'
    end
end

describe 'public/private instance methods' do
  subject {
    extender = Class.new { extend(::X) }
    def extender.build
      puts "Throwing a star"
      build_them(type)
    end

    extender
  }

  it { should respond_to :build }
end

describe最上位のコンテキストとして使用する必要がcontextあり、ネストする必要があることに注意してください

于 2012-12-20T11:01:55.917 に答える