为存根编写可链接的dsl

时间:2012-12-19 17:09:29

标签: ruby stub

在我写的一些测试中,我需要创建很多非常相似的存根。我正在使用摩卡。

user.stubs(:hq?).returns(false)
user.stubs(:has_role?).with("admin").returns(true)

等等。这是一个非常重复且不干燥的组合物。我想知道我是否可以将其转换为某种可链接的dsl。

user = user_stubber.hq.with_role("admin")

有没有一种好方法可以在Mocha中解决这个问题。或者是否有更好的存根库可以提供这种能力?

1 个答案:

答案 0 :(得分:0)

我最终的解决方案是我放在/ test / lib /中的user_stubber.rb文件。

require 'mocha'

class UserStubber

  def no_roles
    self.stubs(has_role?: false)
    self
  end

  def hq
    self.stubs(:hq?).returns(true)
    self
  end 

  def field
    self.stubs(:hq?).returns(false)
    self
  end

  def with_role(role)
    self.stubs(:has_role?).with(role).returns(true)
    self
  end
end

在测试中,我现在可以做到:

user.no_roles.hq.with_role('admin')

等等。因为它返回一个可存根的对象,我可以做

user.hq.stubs(:other_method).with(params).returns(true)