Ruby on rails 如何在rails中以最小的数据库开销测试关联扩展逻辑

Ruby on rails 如何在rails中以最小的数据库开销测试关联扩展逻辑,ruby-on-rails,testing,rspec,associations,Ruby On Rails,Testing,Rspec,Associations,我喜欢在任何地方使用mock和stub来保持我的规范快速运行。 我有点困惑,我该如何在下面测试find_特殊方法: has_many :foos do def find_special if proxy_owner.baz ... find stuff else ... find other stuff end end end 我不介意为此使用:extend=>模块语法,但我不认为这有什么区别。您是在

我喜欢在任何地方使用mock和stub来保持我的规范快速运行。 我有点困惑,我该如何在下面测试find_特殊方法:

  has_many :foos do 
    def find_special
      if proxy_owner.baz
        ... find stuff
      else
        ... find other stuff
      end
    end
  end

我不介意为此使用:extend=>模块语法,但我不认为这有什么区别。

您是在问如何在
代理上存根方法吗?在这种情况下,它不是您正在调用的对象吗

# in Mocha
item.stubs(:baz).returns(true)
item.foos.find_special # => find stuff
item.stubs(:baz).returns(false)
item.foos.find_special # => find other stuff

这是未经测试的,但它可能会让你接近。

但我仍然需要制作一堆Foo对象,并在测试之前将它们保存到数据库中,对吗?我正在寻找一种方法来测试find_特殊方法是否会使用正确的参数调用Foo.find,无需实际对数据库运行查询。较短版本:我知道如何使用工厂/装置进行测试-我想看看是否可以在没有它们的情况下进行测试。您可以在内存中构建item和foos:item.new和item.foos.build。无需触摸数据库。