多个连接模拟和Rspec

时间:2018-04-26 19:12:57

标签: ruby rspec mocking stub sequel

我正在试图嘲笑这个陈述,但我在互联网上找不到任何帮助我的东西:

  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

1 个答案:

答案 0 :(得分:2)

以前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])

如果你发现自己重复过多的代码会让你考虑重构它,这最终是人们进行测试的原因之一:“如果它很难测试,它可能没有很好的设计”