0

私が書いているいくつかのテストでは、かなり似ているスタブをたくさん作成する必要があります。モカを使っています。

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

等々。それは非常に反復的で乾燥していない組み合わせです。これをある種の連鎖可能なDSLに切り替えることができるかどうか疑問に思っています。

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

モカでこれにアプローチする良い方法はありますか? または、この機能を提供するより優れたスタブ ライブラリはありますか?

4

1 に答える 1

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)
于 2012-12-19T21:56:12.520 に答える