14

次のようなクラス定義があるとしましょう。

class Foo
  def init(val)
    @val = val
  end

  def self.bar
    :bar
  end

  def val
    @val
  end
end

次のような仕様で:

describe Foo
  it { should respond_to(:val) }
  it { should respond_to(:bar) }
end

2 番目のitアサーションは失敗します。respond_toクラスメソッドで失敗するはずのRSpecのドキュメントからは明らかではありません。

4

2 に答える 2

18

最近では、次のように expect を使用することが提案されています。

describe Foo do
  it 'should respond to :bar' do
    expect(Foo).to respond_to(:bar)
  end
end

参照: http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/


古い答え:

実際には、件名を指定することでこのアプローチを作成できます。

describe Foo do
  subject { Foo }
  it { should respond_to :bar } # :bar being a class method
end

ここで説明されているように: http://betterspecs.org/#subject

于 2012-10-27T16:30:29.013 に答える
13

あなたの例は次のように書かれるべきです:

it 'should respond to ::bar' do
  Foo.should respond_to(:bar)
end
于 2012-04-19T15:12:51.097 に答える