如何断言一个类将使用RSpec响应一个类方法?

tro*_*ine 13 ruby rspec2

假设我有类定义,如下所示:

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

  def self.bar
    :bar
  end

  def val
    @val
  end
end
Run Code Online (Sandbox Code Playgroud)

有一个规格:

describe Foo
  it { should respond_to(:val) }
  it { should respond_to(:bar) }
end
Run Code Online (Sandbox Code Playgroud)

第二个it断言失败了.从RSpec的文档中我不清楚respond_to应该在类方法上失败.

Art*_*zan 18

现在建议我们使用expect,如下所示:

describe Foo do
  it 'should respond to :bar' do
    expect(Foo).to respond_to(:bar)
  end
end
Run Code Online (Sandbox Code Playgroud)

请参阅: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
Run Code Online (Sandbox Code Playgroud)

如下所述:http://betterspecs.org/#subject


Bra*_*dan 11

你的例子应该这样写:

it 'should respond to ::bar' do
  Foo.should respond_to(:bar)
end
Run Code Online (Sandbox Code Playgroud)