Ruby 如何在PORO';s

Ruby 如何在PORO';s,ruby,rspec,rspec-expectations,Ruby,Rspec,Rspec Expectations,嗨 我正试着把我的一些眼镜擦干。我提取了一个断言类,该类执行两个shoulds。。。但是大多数RSpec的期望魔法已经不起作用了 我将尝试构造一个简单的示例来说明我的问题 被测对象: class-Foo def是否有_bar?;是的;结束 结束 我的断言类: 类MyAssertions def self.assert_一切正常 @foo=foo.new @foo.has_bar?.should==true#有效! @foo.has_bar?应为_true#未定义的局部变量或方法`be_true

我正试着把我的一些眼镜擦干。我提取了一个断言类,该类执行两个
should
s。。。但是大多数RSpec的期望魔法已经不起作用了

我将尝试构造一个简单的示例来说明我的问题

被测对象:

class-Foo
def是否有_bar?;是的;结束
结束
我的断言类:

类MyAssertions
def self.assert_一切正常
@foo=foo.new
@foo.has_bar?.should==true#有效!
@foo.has_bar?应为_true#未定义的局部变量或方法`be_true`
@foo.have_bar应为未定义的局部变量或方法'have_bar`
结束
结束
我的规格:

它“测试”了一些事情
@foo=foo.new
@foo.应该有酒吧的工作!
由于上述错误,MyAssertion.assert_everything_is_ok#无法工作
结束

为什么我不能在简单的旧ruby对象中使用rspec expections的语法糖?

经过更多的尝试,我想出了以下解决方案:

class MyAssertions
  include RSpec::Matchers

  def assert_everything_is_ok
    @foo = Foo.new
    @foo.has_bar?.should == true  # works!
    @foo.has_bar?.should be_true  # works now :)
    @foo.should have_bar          # works now :)
  end
end

诀窍是
包括
RSpec::Matchers
模块。我使用实例方法而不是类方法。

经过更多的尝试,我想出了这个解决方案:

class MyAssertions
  include RSpec::Matchers

  def assert_everything_is_ok
    @foo = Foo.new
    @foo.has_bar?.should == true  # works!
    @foo.has_bar?.should be_true  # works now :)
    @foo.should have_bar          # works now :)
  end
end

诀窍是
包括
RSpec::Matchers
模块。我使用实例方法而不是类方法。

一种更像RSpec的方法是:


更“类似于RSpec”的方法是:


那很好。谢谢你指出这一点。它非常适合我发布的简化示例。然而,我的现实世界问题更复杂,页面对象和行为对象需要访问匹配器(规范本身之外)。这很好。谢谢你指出这一点。它非常适合我发布的简化示例。然而,我的实际问题更为复杂,其特点是页面对象和行为对象需要访问匹配器(规范本身之外)。