多个连接模拟和 Rspec

Multiple joins mocks and Rspec

我想嘲笑这个说法,但我在互联网上找不到任何帮助我的东西:

  someone_ids = Office.join(:address, id: :address_id)
                      .join(:office_someone, id: :id)
                      .pluck(:someone_id)

这是我使用的规范:

  expect(Office).to receive(:join)
                .with(:office_someone, { :id => :id })
                .with(:address, { :id => :address_id })
                .and_return([1])

有人知道如何模拟多个 join 吗?我正在使用 Sequel.

以前 RSpec 有一个 stub_chain 方法可以让你轻松地做类似的事情,但它被删除了,因为它鼓励不良做法,现在你必须手动存根每个响应:

office = instance_double(Office)
expect(Office).to receive(:join)
              .with(:address, { :id => :address_id })
              .and_return(office)
expect(office).to receive(:join)
              .with(:office_someone, { :id => :id })
              .and_return(office)
expect(office).to receive(:pluck).with(:someone_id).and_return([1])

如果你发现自己重复太多的代码会让你考虑重构它,这最终是人们进行测试的原因之一:"If its hard to test, it might not be well designed"