【问题标题】:Multiple joins mocks and Rspec多个连接模拟和 Rspec
【发布时间】:2018-10-07 14:10:07
【问题描述】:

我试图模拟这个声明,但我在互联网上找不到任何可以帮助我的东西:

  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

【问题讨论】:

    标签: ruby rspec mocking stub sequel


    【解决方案1】:

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-31
    • 1970-01-01
    • 2023-03-26
    • 2011-05-15
    • 1970-01-01
    • 1970-01-01
    • 2014-02-23
    相关资源
    最近更新 更多