在我写的一些测试中,我需要创建很多非常相似的存根。我正在使用摩卡。
user.stubs(:hq?).returns(false)
user.stubs(:has_role?).with("admin").returns(true)
等等。这是一个非常重复且不干燥的组合物。我想知道我是否可以将其转换为某种可链接的dsl。
user = user_stubber.hq.with_role("admin")
有没有一种好方法可以在Mocha中解决这个问题。或者是否有更好的存根库可以提供这种能力?
答案 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)